第一个python&selenium自动化测试实战项目

上一篇 / 下一篇  2019-12-18 11:37:32

说明:本项目采用流程控制思想,未引用unittest&pytest等单元测试框架
  一.项目介绍
  目的
  测试某官方网站登录功能模块可以正常使用
  用例
  1.输入格式正确的用户名和正确的密码,验证是否登录成功;
  2.输入格式正确的用户名和不正确的密码,验证是否登录失败,并且提示信息正确;
  3.输入格式正确的用户名和任意密码,验证是否登录失败,并且提示信息正确;
  4.用户名和密码两者都为空,验证是否登录失败,并且提示信息正确;
  5.用户名和密码两者之一为空,验证是否登录失败,并且提示信息正确;
  环境
  Windows10 +Python3.6+selenium3.13+Pycharm
  环境我想大多数人都会搭建,有事没事找百度,一搜一箩筐,哈哈!我自己刚学的时候也是各种问题各种百度,好在都解决了,感谢有度娘这么强大的存在!这里就不写环境怎么搭建了,直接进入主题
  二.脚本设计
  目的
  我们的测试脚本需要达到:脚本可移植,脚本模块化,测试数据分离,输出测试报告 等目的
  脚本设计模式
 
  代码实现
  项目目录结构
 
  注:下面的文件存放在同一个目录下
   1 #! user/bin/python
  2 '''
  3 代码说明:麦子学院登录模块自动化测试用例脚本
  4 编写日期:
  5 设置者:linux超
  6 '''
  7
  8 import time
  9 fromseleniumimport webdriver
  10 from webinfo import webinfo
  11 from userinfo import userinfo
  12 from log_fiile import login_log
  13 from pathlib import Path
  14
  15 def open_web():
  16     driver = webdriver.Firefox()
  17     driver.maximize_window()
  18     return driver
  19
  20 def load_url(driver,ele_dict):
  21     driver.get(ele_dict['Turl'])
  22     time.sleep(5)
  23
  24 def find_element(driver,ele_dict):
  25     # find element
  26     driver.find_element_by_class_name(ele_dict['image_id']).click()
  27     if 'text_id' in ele_dict:
  28         driver.find_element_by_link_text('登录').click()
  29
  30     user_id = driver.find_element_by_id(ele_dict['userid'])
  31     pwd_id = driver.find_element_by_id(ele_dict['pwdid'])
  32     login_id = driver.find_element_by_id(ele_dict['loginid'])
  33     return user_id,pwd_id,login_id
  34
  35 def send_val(ele_tuple,arg):
  36     # input userinfo
  37     listkey = ['uname','pwd']
  38     i = 0
  39     for key in listkey:
  40         ele_tuple[i].send_keys('')
  41         ele_tuple[i].clear()
  42         ele_tuple[i].send_keys(arg[key])
  43         i+=1
  44     ele_tuple[2].click()
  45 def check_login(driver,ele_dict,log,userlist):
  46     result = False
  47     time.sleep(3)
  48     try:
  49         err = driver.find_element_by_id(ele_dict['error'])
  50         driver.save_screenshot(err.text+'.png')
  51         log.log_write('账号:%s 密码:%s 提示信息:%s:failed\n' %(userlist['uname'],userlist['pwd'],err.text))
  52         print('username or password error')
  53     except:
  54         print('login success!')
  55         log.log_write('账号:%s 密码:%s :passed\n'%(userlist['uname'],userlist['pwd']))
  56         #login_out(driver,ele_dict)
  57         return True
  58     return result
  59 def login_out(driver,ele_dict):
  60     driver.find_element_by_class_name(ele_dict['logout']).click()
  61 '''
  62 def screen_shot(err):
  63     i = 0
  64     save_path = r'D:\pythondcode\capture'
  65     capturename = '\\'+str(i)+'.png'
  66     wholepath = save_path+capturename
  67     if Path(save_path).is_dir():
  68         pass
  69     else:
  70         Path(save_path).mkdir()
  71     while Path(save_path).exists():
  72         i+=1
  73         capturename = '\\'+str(i)+'.png'
  74         wholepath = save_path + capturename
  75     err.screenshot(wholepath)
  76 '''
  77 def login_test():
  78     log = login_log()
  79     #ele_dict = {'url': 'http://www.maiziedu.com/', 'text_id': '登录', 'user_id': 'id_account_l', 'pwd_id': 'id_password_l'
  80         #, 'login_id': 'login_btn','image_id':'close-windows-btn7','error_id':'login-form-tips'}
  81     ele_dict = webinfo(r'D:\pythoncode\webinfo.txt')
  82     #user_list=[{'uname':account,'pwd':pwd}]
  83     user_list = userinfo(r'D:\pythoncode\userinfo.txt')
  84     driver = open_web()
  85     # load url
  86     load_url(driver,ele_dict)
  87     #find element
  88     ele_tuple = find_element(driver,ele_dict)
  89     # send values
  90     ftitle = time.strftime('%Y-%m-%d', time.gmtime())
  91     log.log_write('\t\t\t%s登录系统测试报告\n' % (ftitle))
  92     for userlist in user_list:
  93         send_val(ele_tuple,userlist)
  94         # check login success or failed
  95         result = check_login(driver,ele_dict,log,userlist)
  96         if result:
  97             login_out(driver,ele_dict)
  98             time.sleep(3)
  99             ele_tuple = find_element(driver,ele_dict)
  100     time.sleep(3)
  101     log.log_close()
  102     driver.quit()
  103
  104 if __name__ == '__main__':
  105     login_test()
  
   1 #! user/bin/python
  2 '''
  3 代码说明:从文本文档中读取用户信息
  4 编写日期:
  5 设置者:linux超
  6 '''
  7
  8 import codecs
  9
  10 def userinfo(path):
  11     file = codecs.open(path,'r','utf-8')
  12     user_list = []
  13     for line in file:
  14         user_dict = {}
  15         result = [ele.strip() for ele in line.split(';')]
  16         for sult in result:
  17             re_sult = [ele.strip() for ele in sult.split('=')]
  18             user_dict.update(dict([re_sult]))
  19         user_list.append(user_dict)
  20     return user_list
  21
  22 if __name__ == '__main__':
  23     user_list = userinfo(r'D:\pythoncode\userinfo.txt')
  24     print(user_list)
 
   1 #! user/bin/python
  2 '''
  3 代码说明:从文本文档中读取web元素
  4 编写日期:
  5 设置者:linux超
  6 '''
  7
  8 import codecs
  9
  10 def webinfo(path):
  11     file = codecs.open(path,'r','gbk')
  12     ele_dict = {}
  13     for line in file:
  14         result = [ele.strip() for ele in line.split('=')]
  15         ele_dict.update(dict([result]))
  16     return ele_dict
  17
  18 if __name__ == '__main__':
  19     ele_dict = webinfo(r'D:\pythoncode\webinfo.txt')
  20     for key in ele_dict:
  21         print(key,ele_dict[key])
 
   1 #! user/bin/python
  2 '''
  3 代码说明:测试输出报告
  4 编写日期:
  5 设置者:linux超
  6 '''
  7
  8 import time
  9
  10 class login_log(object):
  11     def __init__(self,path='',mode='w'):
  12         filename = path + time.strftime('%Y-%m-%d',time.gmtime())
  13         self.log = open(path+filename+'.txt',mode)
  14     def log_write(self,msg):
  15         self.log.write(msg)
  16     def log_close(self):
  17         self.log.close()
  18 if __name__ == '__main__':
  19     log=login_log()
  20     ftitle = time.strftime('%Y-%m-%d',time.gmtime())
  21     log.log_write('xiaochao11520')
  22     log.log_close()
 
   1 uname=273839363@qq.com;pwd=xiaochao11520
  2 uname=273839363;pwd=xiaochao11520
  3 uname= ;pwd=xiaochao11520
  4 uname=273839363@qq.com;pwd=
  5 uname=2738;pwd=xiaochao
 
   1 Turl=http://www.maiziedu.com/
  2 text_id=登录
  3 userid=id_account_l
  4 pwdid=id_password_l
  5 loginid=login_btn
  6 error=login-form-tips
  7 logout=sign_out
  8 image_id=close-windows-btn7
  

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar