博客
关于我
Python+Selenium自动化测试项目实战
阅读量:796 次
发布时间:2023-03-08

本文共 3887 字,大约阅读时间需要 12 分钟。

项目介绍

目的

本项目旨在测试某官方网站的登录功能模块是否能够正常使用。

用例

  • 输入正确的用户名和密码,验证是否登录成功
  • 输入正确的用户名和错误的密码,验证登录失败且提示信息正确
  • 输入正确的用户名和任意密码,验证登录失败且提示信息正确
  • 输入空用户名和空密码,验证登录失败且提示信息正确
  • 输入空用户名或空密码(仅有一个为空),验证登录失败且提示信息正确
  • 环境

    • 操作系统:Windows 10
    • Python版本:3.6
    • Selenium版本:3.13
    • IDE:PyCharm

    脚本设计

    目的

    我们的测试脚本需要实现以下功能:

    • 脚本可移植性:能够在不同的测试环境中运行
    • 模块化设计:代码结构清晰,便于维护和扩展
    • 测试数据分离:测试数据存储在外部文件中,避免混杂在代码中
    • 自动生成测试报告

    脚本设计模式

    采用模块化设计,代码分为多个函数,实现对应的功能单元。通过参数化的方式,支持灵活配置测试数据和环境。

    代码实现

    项目目录结构

    ├── login_test.py  ├── userinfo.py  ├── webinfo.py  ├── login_log.py  └── config.py

    代码解释

    login_test.py

    # 代码说明:麦子学院登录模块自动化测试用例脚本  def open_web():      """打开浏览器并最大化窗口"""      driver = webdriver.Firefox()      driver.maximize_window()      return driver  def load_url(driver, ele_dict):      """加载指定URL并等待5秒"""      driver.get(ele_dict['Turl'])      time.sleep(5)  def find_element(driver, ele_dict):      """定位并点击元素"""      driver.find_element_by_class_name(ele_dict['image_id']).click()      if 'text_id' in ele_dict:          driver.find_element_by_link_text('登录').click()  def send_val(ele_tuple, arg):      """输入用户名和密码"""      listkey = ['uname', 'pwd']      for i, key in enumerate(listkey):          ele_tuple[i].send_keys('')          ele_tuple[i].clear()          ele_tuple[i].send_keys(arg[key])      ele_tuple[2].click()  def check_login(driver, ele_dict, log, userlist):      """检查登录结果并处理异常"""      try:          err = driver.find_element_by_id(ele_dict['error'])          driver.save_screenshot(err.text + '.png')          log.log_write(f'账号:{userlist["uname"]}, 密码:{userlist["pwd"]}, 提示信息:{err.text}:failed')          print('username or password error')          return False      except:          print('login success!')          log.log_write(f'账号:{userlist["uname"]}, 密码:{userlist["pwd"]}:passed')          return True  def login_out(driver, ele_dict):      """退出登录页面"""      driver.find_element_by_class_name(ele_dict['logout']).click()  def login_test():      """执行登录测试"""      log = login_log()      ele_dict = webinfo('webinfo.txt')      user_list = userinfo('userinfo.txt')      driver = open_web()      load_url(driver, ele_dict)      ele_tuple = find_element(driver, ele_dict)      ftitle = time.strftime('%Y-%m-%d', time.gmtime())      log.log_write(f'\t\t\t{ftitle}登录系统测试报告')      for user in user_list:          send_val(ele_tuple, user)          if check_login(driver, ele_dict, log, user):              login_out(driver, ele_dict)              time.sleep(3)              ele_tuple = find_element(driver, ele_dict)      log.log_close()      driver.quit()  if __name__ == '__main__':      login_test()

    userinfo.py

    # 代码说明:从文本文档中读取用户信息  def userinfo(path):      """读取用户信息文件并返回用户列表"""      file = codecs.open(path, 'r', 'utf-8')      user_list = []      for line in file:          user_dict = {}          result = [ele.strip() for ele in line.split(';')]          for sult in result:              re_sult = [ele.strip() for ele in sult.split('=')]              user_dict.update(dict([re_sult]))          user_list.append(user_dict)      return user_list  if __name__ == '__main__':      user_list = userinfo('userinfo.txt')      print(user_list)

    webinfo.py

    # 代码说明:从文本文档中读取web元素信息  def webinfo(path):      """读取元素信息文件并返回元素字典"""      file = codecs.open(path, 'r', 'gbk')      ele_dict = {}      for line in file:          result = [ele.strip() for ele in line.split('=')]          ele_dict.update(dict([result]))      return ele_dict  if __name__ == '__main__':      ele_dict = webinfo('webinfo.txt')      for key in ele_dict:          print(f'{key}: {ele_dict[key]}')

    测试数据

    用户信息

    uname=273839363@qq.com;pwd=xiaochao115202  uname=273839363;pwd=xiaochao115203  uname= ;pwd=xiaochao115204  uname=273839363@qq.com;pwd=5  uname=2738;pwd=xiaochao

    元素信息

    Turl=http://www.maiziedu.com/  text_id=登录  userid=id_account_l  pwdid=id_password_l  loginid=login-btn  image_id=close-windows-btn7  error=login-form-tips  logout=sign_out

    测试结果

    通过优化后的代码,测试能够覆盖所有预定义的用例,并生成详细的测试报告。

    转载地址:http://hgofk.baihongyu.com/

    你可能感兴趣的文章
    Python 操作Redis
    查看>>
    Python 操作sqlite数据库及保存查询numpy类型数据(一)
    查看>>
    Python 操作sqlite数据库及保存查询numpy类型数据(二)
    查看>>
    Python 数据文件与网络数据序列化存储详解
    查看>>
    Python 数据结构与算法详解
    查看>>
    Python 数据采集、清洗、整理、分析以及可视化实战
    查看>>
    Python 数据预处理
    查看>>
    python 文件类型检测 linux和windows都可以用
    查看>>
    Python 无法安装包
    查看>>
    python 日历小部件 - 返回用户选择的日期
    查看>>
    Python 日志管理封装
    查看>>
    python 时间函数小总结
    查看>>
    Python 是否优化尾递归?
    查看>>
    Python 更新set
    查看>>
    Python 最强 IDE 详细使用指南!
    查看>>
    Python 有一个不可变的列表吗?
    查看>>
    Python 机器学习入门之 pandas 的使用
    查看>>
    Python 机器学习实战
    查看>>
    python 杀死子进程_subprocess.popen.kill杀死所有子进程
    查看>>
    Python 条件语句与循环结构详解
    查看>>