前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pytest+Allure+Jenkins持续集成实战

Pytest+Allure+Jenkins持续集成实战

原创
作者头像
晴空SunnySky
修改2023-09-28 15:19:41
4630
修改2023-09-28 15:19:41
举报
文章被收录于专栏:QA在路上QA在路上

一:环境配置

1.1 安装pytest

pytest官网地址:https://github.com/pytest-dev/pytest/

pytest第三方插件:http://plugincompat.herokuapp.com/

前置条件:已安装Python环境

使用pip安装pytest,在Dos窗口中执行pip install -U pytest命令:

安装Allure2

前置条件:已部署java环境

allure 是一个轻量级的,灵活的,支持多语言,多平台的report框架

Allure2官网地址:https://github.com/allure-framework/allure2

Win10 安装allure2:需要在Power Shell窗口中执行scoop install allure命令:

  • Win键+X 调出Power Shell窗口
  • Power Shell窗口执行如下命令(先安装scoop):

iex (new-object net.webclient).downloadstring('https://get.scoop.sh')

执行后,使用scoop命令查看是否正确安装(下图说明安装正确):

  • Power Shell窗口执行scoop install allure命令(如下图安装成功):

注意:win7下要执行pip install pytest-adaptor-allure安装allure的适配器!

二:Pytest的参数详解

2.1:--collect-only

使用--collect-only选项可以展示在给定的配置下哪些测试用例会被执行。

2.2:-k

-k选项允许我们使用表达式指定希望执行的测试用例。

2.3:-m

-m(marker)用于标记测试并分组以便快速选择并执行测试用例。

使用的前提条件是必须使用pytest.mark.marker_name标记测试用例

-m可以使用多个marker_name(标记名称),当然它也支持and not or这些规则。

2.4:-x(--exitfirst)

正常情况下,pytest会运行每个收集到的测试用例。如果某个测试函数被断言失败或者触发了外部异常,则该测试用例的运行就会终止,pytest将其标记为失败后会继续下一个测试用例。通常来说这是我们期望的运行模式。但是在debug时,我们会希望失败时立即终止整个会话,此时,-x选项就可以满足我们的需求了。

2.5:--maxfail=num

-x选项的特点是一旦遇到失败就会立即终止会话。如果我们允许pytest失败几次后再停止,那么就果断使用--maxfail选项吧。 例子:pytest --maxfail=3(pytest执行过程中失败3次后终止会话)

2.6:-s(--capture=method)

-s选项允许终端在测试过程中输出某些结果,包括任何附和标准的输出流信息。-s等价于--capture=no。正常情况下,所有的测试输出都会被捕获。

2.7:--lf(--last-failed)

当一个或多个测试用例失败时,如果我们希望定位到最后一个失败的测试用例重新执行,此时,可以使用--lf选项。

2.8:--ff(--failed-first)

--ff和--lf选项的作用差不多,不同之处在于--ff会运行完剩余的测试用例。

2.9:-v(--verbose)

使用-v选项,输出的信息会更详细。

2.10:-q(--quit)

-q选项和-v选项作用相反,它会简化输出信息。

2.11:-l(--showlocals)

使用-l选项,失败的测试用例由于被堆栈追踪,所以局部变量及其值都会显示出来。

2.12:--tb=style

--tb选项觉得了捕获到失败时输出信息的显示方式。 推荐的style类型有short,line,no。 Short模式:仅输出assert的一行一级系统判定内容。 line模式只使用一行输出显示所有的错误信息。 no模式则直接屏蔽全部回溯信息。

2.13:--duration=N

--duration=N选项可以加快测试节奏。它不关心测试如何执行,只统计测试过程中哪几个阶段是最慢的,展示最慢的N个阶段,耗时越长越靠前。如果指定duration=0,将所有阶段按耗时从长到短排序后显示。

三:Pytest的精髓Fixture

fixture是在测试函数运行前后,又pytest执行的外壳函数。fixture中的代码可以定制,满足多变的测试需求,包括定义传入测试中的数据集,配置测试前系统的初始状态,为批量测试提供数据源等。

@pytest.fixture()装饰器用于声明函数是一个fixture。如果测试函数的参数列表中包含fixture名,那么Pytest会检测到,并在测试函数运行之前执行该fixture。fixture可以完成任务,也可以返回数据给测试函数。

3.1:通过conftest.py共享fixture

fixture可以放在单独的测试文件中。如果希望多个测试文件共享fixture,可以在用例层目录下新建一个conftest.py文件,将fixture放在其中。

3.2:使用fixture执行预置&销毁逻辑

fixture函数会在测试函数之前执行,但如果fixure函数包含yield,那么系统会在yield处停止,转而运行测试函数,等测试函数执行完毕后再回到fixture,执行yield后面的代码。

因此,可以将yield之前的代码视为配置过程(setup),将yield之后的代码视为清理过程(teardown)。物流测试过程中发生了什么,yield之后的代码都会被执行。

# -*- encoding = utf-8 -*- import pytest from Basic import commons # 全局setup和teardown 预置条件是登录,所欲case执行完成后退出driver @pytest.fixture(scope="session", autouse=True) def login(): commons.login() yield login commons.quit_driver()

上面代码的例子是所有用例执行前先执行系统的登录操作,所有用例执行完成后退出driver。

3.3 :使用--setup-show回溯fixture的执行过程

我们编写fixture时如果希望看到测试过程中执行的是什么以及执行的先后顺序,pytest提供--setup-show选项可以实现我们想要的。

3.4 使用fixture传递测试数据

fixture非常适合存放测试数据,并且它可以返回任何数据。

@pytest.fixture() def save_test_data(): return {"name": "kevin", "passwd": "hello1234"}

3.5 指定fixture作用域

fixture包含一个叫scope的可选参数,用于控制fixture执行配置和销毁逻辑的频率。

@pytest.fixture(scope=作用域)有4个可选值。

Scope=’function’:

函数级别的fixture每个测试函数只需要执行一次,配置代码在测试用例执行之前执行,销毁代码在测试用例运行之后运行。function是scope的默认值。

Scope=’class’:

类级别的fixture每个测试类只执行一次,无论测试类里有多少类方法都可以共享这个fixture。

Scope=’module’:

模块级别的fixture每个模块执行需要运行一次,无论模块里有多少个测试函数,类方法或其他fixture都可以共享这个fixture。

Scope=’session’:

会话级别的fixture,每次会话只需要执行一次,一次pytest会话中的所有测试函数,方法都可以共享这个fixture。

作用范围虽然由fixture自身定义,但是要注意scope参数是在定义fixture时定义的,因此,使用fixture的测试函数无法改变fixture的作用域。fixture智能使用同级别的fixture,或者比自己级别更高的fixture。比如:函数级别的fixture可以可使用同级别的fixture,也可以使用类级别,模块级别,会话级别的fixture,但反过来不行!

3.6:fixture的autouse选项

fixture的可选项autouse可以决定是不是所有的测试用例自动使用该fixture。

例子:

# 全局setup和teardown 预置条件是登录,所欲case执行完成后退出driver @pytest.fixture(scope="session", autouse=True) def login(): commons.login() yield login commons.quit_driver()

四:Pytest的插件

可以从https://docs.pytest.org/en/latest/plugins.html查看下载pytest的插件。

4.1 pytest-repeat

如果希望在一个会话中重复允许测试用例,可以使用pytest-repeat插件。

(如果测试执行总是断断续续失败,可以尝试这个插件)

执行pip(3) install -U pytest-repeat可安装最新版本

4.2 pytest-xdist

通常测试都是依次执行,因为有些资源依次只能被一个用例访问。如果我们的测试用例不需要访问共享资源,那么就可以通过并行执行来提高执行速度。

使用pytest-xdist可以指定处理器进程数目来同时执行多个测试,如果我们将pytest-xdist和selenium-grid结合起来可以将测试在多台机器上执行。

执行pip(3) install pytest-xdist安装此插件。

4.3 pytest-timeout

默认情况下,pytest里的测试执行是没有时间限制的。如果测试过程中涉及会消失的资源,比如web服务,那么最好为测试执行时间加上时间限制。

Pytest-timeout允许我们指定超时时间或者直接在测试代码中标注超时时间。

测试用例上标注的超时时间优先级高于命令行上的超时时间优先级。

4.4 pytest-rerunfail

如果我们有测试用例失败后重跑的需求,那pytest-rerunfail插件值得一试。

4.5 pytest-instafail

默认情况下,pytest会在所有测试执行完毕后显示错误和失败用例的堆栈信息。如果测试执行时间很长,而我们希望及时看到错误或堆栈回溯信息而不是等所有用例执行完之后查看,那么就pip install pytest-instafail安装插件吧

它的使用也比较简单只需要pytest --instafail执行时加上选项即可。

4.6 pytest-html

Pytest-html对持续集成或长时间执行的测试非常有用。它可以为pytest测试生产一个现实测试结果的网页。这个HTML报告可以对测试结果(通过,跳过,失败,错误,预期失败,预期失败但通过)进行筛选,还可以按测试名称,持续时间,结果状态来排序。

HTML报告还可以定制一些元素,如截图,输出信息。

Pip install -U pytest-html安装插件

Pytest 用例绝对路径 --html=html报告文件的绝对路径

五:Allure(漂亮的测试报告)

Allure框架是一个灵活的轻量级多语言测试报告工具,它不仅显示了在整洁的Web报告表单中测试内容的非常简洁的表示,而且允许参与开发过程的每个人从每天的测试执行中提取最大的有用信息。

从dev/qa的角度来看,Allure报告缩短了常见缺陷的生命周期:测试失败可以分为bug和中断的测试,还可以配置日志、步骤、固定装置、附件、计时、历史以及与tms和bug跟踪系统的集成,因此负责的开发人员和测试人员将掌握所有信息。

从管理者的角度来看,Allure提供了一个清晰的“大图”,其中包含了哪些特性、缺陷在哪里聚集、执行的时间轴是什么样子的,以及许多其他方便的事情。

Jenkins配置Allure

  • 安装allure插件

系统管理-->插件管理-->可安装插件 搜索allure进行安装

  • 安装Allure Commandline
  • 安装完allure插件后,进入系统管理-->全局工具配置,安装Allure Commandline
  • 新建job-->增加构建步骤-->Windows批处理命令,输入:

python -m pytest E:\future-his\TestCase -n 2 --alluredir D:\\report

说明:

E:\future-his\TestCase:测试用例所在目录(unittest脚本)

D:\\report :测试报告输出目录

-n 2 :表示开启2个线程(未开启seleniumGrid的情况下可去掉)

  • 新增构建后操作,Allure report,输入report所在目录名称:与Windows批处理命令中设置的报告目录名称保持一致(这里使用的是report名称)
  • 执行构建,查看报告:
  • 查看报告详情:

我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一:环境配置
    • 1.1 安装pytest
      • 安装Allure2
      • 二:Pytest的参数详解
      • 三:Pytest的精髓Fixture
      • 四:Pytest的插件
        • 4.1 pytest-repeat
          • 4.2 pytest-xdist
            • 4.3 pytest-timeout
              • 4.4 pytest-rerunfail
                • 4.5 pytest-instafail
                  • 4.6 pytest-html
                  • 五:Allure(漂亮的测试报告)
                    • Jenkins配置Allure
                    相关产品与服务
                    持续集成
                    CODING 持续集成(CODING Continuous Integration,CODING-CI)全面兼容 Jenkins 的持续集成服务,支持 Java、Python、NodeJS 等所有主流语言,并且支持 Docker 镜像的构建。图形化编排,高配集群多 Job 并行构建全面提速您的构建任务。支持主流的 Git 代码仓库,包括 CODING 代码托管、GitHub、GitLab 等。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档