pytest简介及jenkins集成

目录

pytest介绍

pytest之mark功能

pytest之命令行运行用例

pytest之fixture功能

pytest之参数化

pytest之重运行

pytest之html测试报告

pytest之allure测试报告

pytest之jenkins集成

总结:


  1. pytest介绍

    • pytest介绍 - unittest\nose
      • pytest:基于unittest之上的单元测试框架
        1. 自动发现测试模块和测试方法
        2. 断言使用assert+表达式即可
        3. 可以设置测试会话级、模块级、类级、函数级的fixtures 数据准备 + 清理工作
          • unittest:setUp、teardown、setUpClass、tearDownClass
          • 共享前置后置 -- conftest.py
        4. 有丰富的插件库,目前在900个以上 allure
      • 安装命令
        • pip install pytest
        • 安装html报告的插件
          • pip install pytest-html
        • pytest插件地
  2. pytest之mark功能

    • pytest - 收集测试用例

      • pytest收集测试用例的规则
        • 默认从当前目录中搜集测试用例,即在哪个目录下运行pytest命令,则从哪个目录当中搜索
        • 搜索规则
          1. 符合命名规则 test_*.py 或者 *_test.py的文件
          2. 以test开头的函数名
          3. 以Test开头的测试类(没有__init__函数)当中,以test_开头的函数
    • 对测试用例打标签。在运行测试用例的时候,可根据标签名来过滤要运行的用例

      • 使用方法

        • 注册标签名
        • 在测试用例/测试前面加上:@pytest.mark.已注册的标记名
      • 注册方式

        1. 创建pytest.ini文件,在文件中按如下形式添加标签名:

          • [pytest]
            markers=
                slow:marks tests as slow(deselect with '-m "not slow"')
                serial
            
          • 注:冒号之后是可选的描述信息

        2. 在conftest.py文件当中,通过hook注册

          • def pytest_configure(config):
                config.addinivalue_line("markers","smoke1:标记只运行冒烟用例")
                config.addinivalue_line("markers","demo1:示例运行")
            
      • 给用例打标记

        • 方式1

          • 打标记范围:测试用例、测试类、模块文件
          • 在测试用例/测试类前面加上:@pytest.mark.标记名
            • @pytest.mark.slow
          • 可在一个用例上打多个标签,多次使用@pytest.mark.标记名即可
            • @pytest.mark.slow
            • @pytest.mark.serial
        • 方式2

          • 打标记范围:测试用例、测试类、模块文件

          • 在测试类里,使用以下申明(测试类下,所有用例都被打上该标签)

            • class TestClass(object):
                pytestmark = pytest.mark.已注册标签名
                pytestmark = [pytest.mark.标签1, pytest.mark.标签2] # 多标签模式
              
          • 在模块文件里,同理(py文件下,所有测试函数和测试类里的测试函数,都有该标签)

            • import pytest
              pytestmark = pytest.mark.已注册标签名
              pytestmark = [pytest.mark.标签1, pytest.mark.标签2] # 多标签模式
              
  3. pytest之命令行运行用例

    • 安装后,pytest.exe在python安装目录的Scripts目录下,因为配置了环境变量后,可以之间运行pytest

    • 脚本里面是,效果通命令行

      • import pytest
        
        if __name__ == '__main__':
            pytest.main()
        
    • 只运行某个标记

      • pytest -m slow
      • pytest -m slow -s -v # 详细输出
  4. pytest之fixture功能

    • pytest之fixture参数化 - 多运行、pytest层级覆盖。测试用例与其同级或者在其子目录

    • 共享前置后置 -- conftest.py

      • 文件名不可更改,不需要引入就可以使用其中的fixture

      • 一个函数:前置+后置

        • yield分隔前置后置

        • 设置作用域:中间的夹的是什么,默认"function"

          • @pytest.fixture
            def init_driver():
                # 前置
                pass
                # 分隔线
                yield	返回值写在这
                # 后置
                pass
            
    • 调用fixture的三种方式

      1. 在测试用例中直接调用它

        • 将fixture的函数名作为测试用例的参数

        • 如果fixture有返回值,那么测试用例中的fixture函数名字就接收返回值

        • eg

          • def test_xxx(self,myfixture):
                myfixture.find_element_by_xpath("xxx") # 函数名代表了fixture的返回值,即driver
            
      2. 用fixture装饰器调用fixture

        • 在测试用例/测试类前面加上@pytest.mark.usefixtures("fixture函数名字")

        • ps:定义conftest.py文件,在此文件中可定义多个fixture,pytest会自动搜索此文件

        • @pytest.mark.usefixtures("init_driver")
          class TestLogin:
          
              @pytest.mark.slow
              def test_login_success(self, init_driver):
                  init_driver[1]. #返回值直接用,这里返回元组
          
      3. 用autos调用fixture

        • 在定义fixture时,有一个参数是autouse,默认设置为False
        • 当默认为False,就可以选择用上面两种方式来试用fixture
        • 当设置为True时,在一个session内的所有test都会自动调用这个fixture(权限大,责任也大,所以用该功能时也要谨慎小心)
  5. pytest之参数化

    • 在测试用例的前面加上

      • @pytest.mark.parametrize("参数名",列表数据)
      • 参数名:用来接收每一项数据,并作为测试用例的参数
      • 列表数据:一组测试数据
      • @pytest.mark.parametrize("参数1,参数2",[(数据1,数据2),(数据1,数据2)])
    • 示例

      • @pytest.mark.parametrize("aa,b,c", [(1, 3, 4), (10, 35, 45), (22.22, 22.22, 44.44)])
        def test_add(self, a, b, c):
            res = a + b
            assert res == c
        
    • 组合参数化:多组参数,依次组合

      • 使用多个@pytest.mark.parametrize

      • 示例

        • @pytest.mark.parametrize("x",[1,2])
          @pytest.mark.parametrize("y",[2,3])
          def test_foo(x,y):
            pass
          
        • 用例有四个1,2/1,3/2,2/2,3 笛卡尔积

  6. pytest之重运行

    • pytest提供了失败重试机制
    • 插件名称rerunfailures
    • 安装方法
      • pip install pytest-rerunfailures
    • 使用方式
      • 命令行参数形式
        • 命令:pytest --reruns 重试次数
          • 比如:pytest --reruns 2 表示:运行失败的用例可以重新运行2次
        • 命令:pytest --reruns 重试次数 --reruns-delay 次数之间的延时设置(单位:秒)
          • pytest --reruns 2 --reruns-delay5
          • 表示失败的用例可以重新运行2次,第一次和第二次的间隔时间为5秒钟
  7. pytest之html测试报告

    • 需要安装pytest-html插件

    • pytest可以生成多种样式的结果

      • 生成JunitXML格式的测试报告,命令
        • --junitxml=path
      • 生成result log格式的测试报告,命令
        • --resultlog=report\log.txt
      • 生成html格式的测试报告,命令
        • --html=report\test_one_func.html(相对路径)
    • import pytest
      
      if __name__ == '__main__':
          pytest.main(["--reruns", "3", "--reruns-delay", "5", "-m", "fail",
                       "--html=Reports\\report.html", "--junitxml=Reports\\report.xml"])
      
  8. pytest之allure测试报告

    1. 安装allure
      • 下载allure.zip
      • 下载地址
      • 解压到本地目录,配置allure.bat的环境变量ALLURE_HOME
        • 在命令行中运行allure,确认环境变量配置成功
    2. pytest插件安装
      • pip install allure-pytest
    3. pytest生成allure测试报告的命令参数
      • --alluredir=/XXX/my_allure_results
    4. 查看allure的测试报告命令
      • allure serve allure报告目录 相对/绝对
      • eg:allure serve D:\reports\allure
  9. pytest之jenkins集成

    • 安装插件Allure Jenkins Plugin

    • 配置工具路径D:\allure-2.13.5

    • 配置时构建后操作生成allure报告,选择allure report并配置路径(相对)

    • 分布式

      • master/slave模式
        • 分担jenkins服务器的压力,任务分配到其它执行机来执行
        • master:jenkins服务器
        • slave:执行机(奴隶机),执行master分配的任务,并返回任务的进度和结果
        • master
          • 管理节点
          • 分配任务
        • slave
          • 反馈状态
          • 反馈任务进度
          • 反馈任务结果
      • master/slave
        • slave向master注册
        • slave的状态,空闲/忙碌
        • slave的能力,可并行执行任务
    • 配置

      • 节点管理新建节点
      • 全局设置--代理--选择”随机选取“
      • 节点管理新建节点
        • 名字 - 可以唯一指定
        • 执行器数量 - 可以同时执行的任务数
        • 远程工作目录 - 执行机的目录,会自动在该目录下创建workspace,并建相应的job目录
        • 标签 - 可以指定一组中随机一个执行
        • 用法 - 指定
        • 启动方式 - Launch agent by connecting it to the master(利用java web连接)
        • 可用性 - 尽可能使用
        • 节点属性
          • 可以设置执行机的环境变量和工具
      • 连接
        • 连接处下载slave-agent.jnlp直接在执行机运行
          • 可以安装为系统服务,这样的化可以静默执行
          • 连接后就可以运行了
        • 或者在命令行中启动节点
      • 可以执行了

总结:

感谢每一个认真阅读我文章的人!!!

 我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。欢迎大家点击下方名片免费领取,千万不要错过哦。

   Python自动化测试学习交流群:全套自动化测试面试简历学习资料获取点击链接加入群聊【python自动化测试交流】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=DhOSZDNS-qzT5QKbFQMsfJ7DsrFfKpOF&authKey=eBt%2BF%2FBK81lVLcsLKaFqnvDAVA8IdNsGC7J0YV73w8V%2FJpdbby66r7vJ1rsPIifg&noverify=0&group_code=198408628

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值