zoukankan      html  css  js  c++  java
  • python3.6+selenium3.13 自动化测试项目实战一

    一.项目介绍

      目的:

        测试某官方网站登录功能模块可以正常使用

      用例:

        1.输入格式正确的用户名和正确的密码,验证是否登录成功;     2.输入格式正确的用户名和不正确的密码,验证是否登录失败,并且提示信息正确;     3.输入格式正确的用户名和任意密码,验证是否登录失败,并且提示信息正确;     4.用户名和密码两者都为空,验证是否登录失败,并且提示信息正确;     5.用户名和密码两者之一为空,验证是否登录失败,并且提示信息正确;

      环境:

        Windows10 +Python3.6+selenium3.13+Pycharm

      环境我想大多数人都会搭建,有事没事找百度,一搜一箩筐,哈哈!我自己刚学的时候也是各种问题各种百度,好在都解决了,感谢有度娘这么强大的存在!这里就不写环境怎么搭建了,直接进入主题

    二.脚本设计

      目的:

        我们的测试脚本需要达到:脚本可移植,脚本模块化,测试数据分离,输出测试报告 等目的

      脚本设计模式:

        

      代码实现:

        项目目录结构

        

     注:下面的文件存放在同一个目录下

     login_test.py 文件

    复制代码
      1 #! user/bin/python
      2 '''
      3 代码说明:麦子学院登录模块自动化测试用例脚本
      4 编写日期:
      5 设置者:linux超
      6 '''
      7 
      8 import time
      9 from selenium import 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
    ' %(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
    '%(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:pythondcodecapture'
     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:pythoncodewebinfo.txt')
     82     #user_list=[{'uname':account,'pwd':pwd}]
     83     user_list = userinfo(r'D:pythoncodeuserinfo.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('			%s登录系统测试报告
    ' % (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()
    复制代码

    userinfo.py 文件

    复制代码
     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:pythoncodeuserinfo.txt')
    24     print(user_list)
    复制代码

    webinfo.py 文件

    复制代码
     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:pythoncodewebinfo.txt')
    20     for key in ele_dict:
    21         print(key,ele_dict[key])
    复制代码

    log_file.py 文件

    复制代码
     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()
    复制代码

    userinfo.txt 文件  里面的账号信息,自己编辑,但是一定要格式正确,以;分割账号和密码

    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

    webinfo.py 文件

    复制代码
    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
    复制代码
  • 相关阅读:
    SwiftUI 笔记
    SwiftUI 和 Combine 编程
    JQuery 总结(6) 锋利的jQuery
    offset scroll
    JQuery 总结(5)  总结各种小应用
    JQuery 总结(3) jQuery 各种事件
    JQuery 总结(2) jQuery 效果动画
    JQuery 总结(4) DOM操作
    sublime Text
    js总结(11) 语法字典 各种小应用
  • 原文地址:https://www.cnblogs.com/txx403341512/p/9354084.html
Copyright © 2011-2022 走看看