• Pytest简介及jenkins集成


    一、pytest介绍

    pytest介绍 - unittest\nose

    pytest:基于unittest之上的单元测试框架

    自动发现测试模块和测试方法

    断言使用assert+表达式即可

    可以设置测试会话级、模块级、类级、函数级的fixtures 数据准备 + 清理工作

    unittest:setUp、teardown、setUpClass、tearDownClass

    共享前置后置 – conftest.py

    有丰富的插件库,目前在900个以上 allure

    二、安装命令

    pip install pytest

    安装html报告的插件

    pip install pytest-html

    pytest插件地址

    http://plugincompat.herokuapp.com/

    pytest之mark功能

    pytest - 收集测试用例

    pytest收集测试用例的规则

    默认从当前目录中搜集测试用例,即在哪个目录下运行pytest命令,则从哪个目录当中搜索

    三、搜索规则

    符合命名规则 test_*.py 或者 *_test.py的文件

    以test开头的函数名

    以Test开头的测试类(没有__init__函数)当中,以test_开头的函数

    对测试用例打标签。在运行测试用例的时候,可根据标签名来过滤要运行的用例

    四、使用方法

    注册标签名

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

    注册方式

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

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

    在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] # 多标签模式

    pytest之命令行运行用例

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

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

    import pytest if name == ‘main’: pytest.main()
    只运行某个标记

    pytest -m slow

    pytest -m slow -s -v # 详细输出

    pytest之fixture功能

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

    共享前置后置 – conftest.py

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

    一个函数:前置+后置

    yield分隔前置后置

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

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

    在测试用例中直接调用它

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

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

    eg

    def test_xxx(self,myfixture): myfixture.find_element_by_xpath(“xxx”) # 函数名代表了fixture的返回值,即driver
    用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]. #返回值直接用,这里返回元组

    用autos调用fixture

    在定义fixture时,有一个参数是autouse,默认设置为False

    当默认为False,就可以选择用上面两种方式来试用fixture

    当设置为True时,在一个session内的所有test都会自动调用这个fixture(权限大,责任也大,所以用该功能时也要谨慎小心)

    五、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 笛卡尔积

    pytest之重运行

    pytest提供了失败重试机制

    插件名称rerunfailures

    安装方法

    pip install pytest-rerunfailures

    使用方式

    命令行参数形式

    命令:pytest --reruns 重试次数

    比如:pytest --reruns 2 表示:运行失败的用例可以重新运行2次

    命令:pytest --reruns 重试次数 --reruns-delay 次数之间的延时设置(单位:秒)

    pytest --reruns 2 --reruns-delay5

    表示失败的用例可以重新运行2次,第一次和第二次的间隔时间为5秒钟

    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”])
    pytest之allure测试报告

    安装allure

    下载allure.zip

    下载地址

    alure-github:GitHub - allure-framework/allure2: Allure Report is a flexible, lightweight multi-language test reporting tool. It provides clear graphical reports and allows everyone involved in the development process to extract the maximum of information from the everyday testing process

    解压到本地目录,配置allure.bat的环境变量ALLURE_HOME

    在命令行中运行allure,确认环境变量配置成功

    pytest插件安装

    pip install allure-pytest

    pytest生成allure测试报告的命令参数

    –alluredir=/XXX/my_allure_results

    查看allure的测试报告命令

    allure serve allure报告目录 相对/绝对

    eg:allure serve D:\reports\allure

    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直接在执行机运行

    可以安装为系统服务,这样的化可以静默执行

    连接后就可以运行了

    或者在命令行中启动节点

    可以执行了

    学习安排上

    如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

    在这里插入图片描述

    视频文档获取方式:

    这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片进群即可自行领取

  • 相关阅读:
    MySQL 批量操作,一次插入多少行数据效率最高?
    代码随想录训练营day56, 两个字符串的删除操作, 编辑字符
    Linux系统上安装软件
    chapter5——低功耗设计
    【Linux系统编程】第九弹---权限管理操作(下)
    JavaScript 条件循环语句(do while 循环)以及示例和详细代码解释为什么这样写(1)
    [go][转载]vscode配置完go跑个helloworld例子
    Java,常用类与API,日期时间API的使用
    QGIS编译(跨平台编译)之四十三:NetCDF编译(Windows、Linux、MacOS环境下编译)
    【C++】类和对象——拷贝构造函数
  • 原文地址:https://blog.csdn.net/xfw17397388089/article/details/128148869