【自动化测试】关键字驱动接口自动化测试


1. 概念:
  在软件测试领域,"数据驱动"和"关键字驱动"是两种自动化测试的设计模式, 它们都旨在提高测试效率,减少重复劳动,但它们的实现方式和应用场景有所不同。

  (1) 数据驱动(Data-Driven Testing, DDT):

   **优点**
    a. 可变数据:测试数据的输入和预期输出是从外部数据源获取(如数据库、表格)
    b. 高度抽象:测试逻辑与数据分离,使得测试逻辑可以复用于不同的数据
    c. 易于维护:测试数据的更改不需要修改测试脚本,便于非技术背景的测试人员操作。

   **缺点**
    d. 灵活性较低:如果测试逻辑复杂,可能需要编写复杂的脚本来处理不同的数据。
    e. 维护成本:随着测试数据量的增加,数据的管理和维护较为频繁。
  (2) 关键字驱动(Keyword-Driven Testing, KDT)
    关键字驱动是数据驱动测试的扩展,它不仅将测试数据外部化,还将测试操作(关键字)外部化。在这种方法中,关键字代表了一系列的测试步骤或操作,这些关键字通常与具体的测试脚本或函数关联,有效提高了自动化测试的灵活性。

2. 关键字驱动结合实际应用场景的实现
  (1) 数据源选用excel表格维护,上手门槛低,且可自定义增加外部开关或基础信息等配置,随时可改。
  (2) 接口收集:实现快速生成接口自动化测试所需的数据源文件
  (3) 关键字触发测试的颗粒度:一个关键字对应一个接口表格所有接口,类似数据驱动 (关键字与具体测试类关联)
                 一个关键字对应表格中的某一个接口动作,如:发券、核销等 (关键字与具体测试函数关联)
  (4) 降低测试数据维护的成本, 借鉴Jmeter, excel中params支持使用内置变量,如:
      ${mobile} #随机生成一个11位手机号,不区分号段
      ${date} #当前日期,形如:2023-10-31
      ${time} #当前时间,形如:2023-10-31 16:05:53
  (5) 支持失败重试机制:若某一个接口失败,则测试会话等待n秒后重试该接口
  (6) 适配不同场景下的接口执行,统一处理认证信息(cookies,token)和请求方式(GET,POST,PUT,DELETE,PATCH)
  (7) 断言方式:优先以数据源中填写的预期结果作为断言,若无则使用接口通用断言
  (8) 通知:测试执行完成后封装测试报告,发送邮件或钉钉通知
  (9) 测试框架选定pytest,利用@pytest.mark.{keyword}修饰器机制,以标记代表关键字

3. 【pytest】基础干货

 (1) pytest中的脚本设计原则
  * 文件名以 test_*.py 文件和*_test.py
  * 以test_ 开头的函数
  * 以Test开头的类,不能包含 __init__ 方法
  * 以test_开头的类里面的方法
  * 所有的包package必须要有__init__.py 文件

 (2) pytest中的脚本运行指令语法
  * pytest #运行当前目录下所有的测试用例
  * pytest xx.py #运行xx.py脚本中的所有测试用例
  * pytest xx.py::TestClass #运行xx.py脚本中某一个类的所有测试用例
  * pytest xx.py::test_method #运行xx.py脚本中的某一个方法
  * pytest xx.py::TestClass::test_method #运行xx.py脚本中某一个类中的某一个方法
  * pytest -m login #运行用@pytest.mark.login 装饰器修饰的所有测试用例

 (3) pytest-html生成html报告可能遇到的问题

  Q1: pytest --html=report.html #将会在当前目录下生成名为report.html的测试报告,但是css是独立的,分享报告样式会丢如何处理?
  A1:[推荐] pytest --html=test_report.html --self-contained-html #生成合并css样式后的html测试报告
  Q2:  生成的report.html报告里中文乱码如何处理?
  A2:utf-8改为GBK,修改python路径\Lib\site-packages\pytest_html内的html_report.py
    head = html.head(html.meta(charset="utf-8"), html.title(self.title), html_css)

 (4) pytest中如何使用logging记录测试日志到.log文件中?
  借助pytest.ini配置日志的级别、日志格式、写入文件等信息

4. 框架逻辑图

 

5. 源码已上传gitee.com

6. 实际使用方式

  • 指令触发, 命令样例:pytest -m {keyword}
  • 结合Jenkins,以job形式触发, 将关键字放在参数化插件
  • 在测试平台中封装触发指令,供页面调用

 

PS: excel表格中的数据修改的格式注意事项:
  - url: 字符串格式,而不是超链接 (模板中URL设置为不自动转超链接形式)
  - params: (待办)

       1. java中的null换成python中的None 
          2. 添加参数是true和false首字母必须大写

posted @ 2024-05-10 14:58  Joseph312  阅读(32)  评论(0编辑  收藏  举报