zoukankan      html  css  js  c++  java
  • Pytest自动化测试

     一、前言

    测试框架的作用是帮助我们管理测试用例、执行测试用例、参数化、断言、生成测试报告等基础性工作,

    让我们将精力用在测试用例的编写上。好的测试框架应该具有很高的扩展性,支持二次开发,并能够支持多种类型的自动化测试。

    测试工具的作用是为了完成某一类型的测试,比如Selenium用于对WEB UI进行自动化测试,Appium用来对APP进行自动化测试,Jmeter可以用来进行API自动化测试和性能测试。

    另外,Java语言中OkHttp库,Python语言中的requests库,这些HTTP的client也可以看做是一种API测试工具。

     


    二、框架对比

    Robot Framework

    Robot Framework是一个基于Python的,可扩展的关键字驱动的自动化测试框架,用于端到端验收测试和验收测试驱动开发(ATDD)。

    优点:

    1)启用易于使用的表格语法,以统一的方式创建测试用例。

    2)提供从现有关键字创建可重复使用的更高级别关键字的功能。

    3)提供易于阅读的结果报告和HTML格式的日志。

    4)提供一个简单的库API,用于创建自定义测试库

    5)提供标记以分类和选择要执行的测试用例。

    缺点:

    1)固定的表格编写形式,使很多简单的语法变得复杂化,而且不支持复杂语法,不够灵活,并且不利于提升测试人员的代码编写能力,而且容易编写疲劳。

    2)测试数据和测试代码穿插写到同一文件、同一方法中,产生了紧耦合,会导致修改测试数据或测试代码时,可能会相互影响,不利于测试数据和测试脚本的维护。

    Pytest】 

    Pytest 是Python的一种易用、高效和灵活的单元测试框架,可以支持单元和功能测试。

    优点:

    1)容易上手,入门简单,文档丰富,文档中有很多实例可以参考。

    2)能够支持简单的单元测试和复杂的功能测试。

    3)能够执行全部测试用例,也可以挑选部分测试用例执行,并能自动重试失败用例

    4)支持并发执行,还能运行由nose, unittest编写的测试用例。

    5)具有很多第三方插件,并且可以自定义扩展。

    缺点:

    1)由于纯Python编写,需要测试人员具有一定的代码编写与阅读能力

    2)Pytest本身没有直观的用例显示与浏览页面,需要借助第三方模块展示用例分布情况(比如Allure)

     编写规则:

    • 测试文件以test_开头(以_test结尾也可以)
    • 测试类以Test开头,并且不能带有init方法
    • 测试函数以test_开头
    • 断言使用基本的assert即可

    常用装饰器:

    @allure.feature("06成人模块")
    
    class TestAppoint:
    
        @allure.story("601接种单位地区查询")
    
        @allure.severity(allure.severity_level.NORMAL)
    
        @pytest.mark.parametrize("case", testcase_01, ids=casename_01)
    
        def test_601getYyUnits(self, case):
          print(‘测试用例’)

     


    三、新框架说明

    comm: 通用模块
    
      callJava.py:涉及到项目数据加密、序列化方法封装
    
      queryEs.py:关于ES数据查询方法封装
    
      queryMysql.py:关于Mysql类以及数据查询方法封装
    
      queryRedis.py:关于Redis各种类型数据查询方法封装(根据库类型配置判断查询方法)
    
      sendHprose.py:对于Hprose接口调用方法封装
    
      sendHttp.py:对于Http(post/get)接口调用方法封装
    
      writeLogs.py:用于日志输出与保存类的封装
    
      doDatetime.py:日期时间处理方法封装(日期类型转换、年龄周期计算)
    
    conf: 配置文件
    
      dbinfo.py:redis库类型配置
    
      yfjzConfig-js.ini:预防接种配置
    
      ymtConfig.ini:育苗通配置
    
      rconfig.py:配置读取
    
    data: 测试用例数据(yaml文件)
    
    unit: 项目接口封装
    
      baseMethod.py:通用模块与配置结合
    
      apiYfjzService.py:预防接种常用API接口封装
    
      apiYmtArchives.py:育苗通档案信息类API接口封装
    
      apiYmtOnlineBook.py:育苗通在线操作类API接口封装
    
      apiYmtService.py:育苗通常用业务方法封装(预制数据、信息查询、完整一系列动作)
    
      assertResult.py:数据校验基础方法封装
    
      checkResult.py:接口返回和数据库校验入口方法封装
    
      checkPersonInfo.py:人员信息六表校验方法封装
    
      checkAppInfo.py:App业务和在线预约数据库校验方法封装
    
    testcase:测试用例
    
       conftest.py:预处理模块
    
      test_01sync.py:数据推送模块
    
      test_02register.py:手机注册模块
    
      test_03bind.py:人员绑定模块
    
      test_04archives.py:档案显示模块
    
      test_05appoint.py:在线预约模块
    
      test_06adult.py:成人预约模块
    
    requirements.txt:项目依赖
    
    startup.py:启动文件

    解决的痛点:

    1)方法(关键字)的入参过多,容易混淆、使用混乱

    2)方法封装层次简单,重复代码过多,导致自动化用例臃肿(一两百行)

    3)方法功能单一,总体方法太多,使用不便(redis七八种查询方式)

    4)随着用例越来越多,不能并发执行,总执行耗时太长(几个小时)

    5)测试数据固定,参数化太少,对于环境依赖太多,无法扩展(无法切换省市执行)

     


    四、        新版自动化流程图

    1、 自动化运行流程图

     

    2、 接口校验流程图

     

    3、数据库校验流程图

     

    作者:Leozhanggg

    出处:https://www.cnblogs.com/leozhanggg/p/13955012.html

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    nginx限速 原理
    规则引擎 图形界面
    阿里巴巴 规则引擎
    martinfowler Data Guide big data bad things
    Nginx Request URI too large
    linux2.6.30.4内核移植(1)
    根文件系统
    Linux内核配置:定制配置选项
    Linux内核配置:Kconfig
    Linux内核配置:Makefile目标
  • 原文地址:https://www.cnblogs.com/leozhanggg/p/13955012.html
Copyright © 2011-2022 走看看