前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >干货 | 一文搞定 pytest 自动化测试框架(一)

干货 | 一文搞定 pytest 自动化测试框架(一)

原创
作者头像
用户9652437
发布2022-04-26 11:34:08
5400
发布2022-04-26 11:34:08
举报
文章被收录于专栏:功能测试功能测试
image
image

image1080×501 27.2 KB

本文节选自霍格沃玆测试学院内部教材

简介

pytest 是一个成熟的全功能 Python 测试工具,可以帮助您编写更好的程序。它与 Python 自带的 Unittest 测试框架类似,但 pytest 使用起来更简洁和高效,并且兼容 unittest 框架。pytest 有以下实用特性:

  • pytest 能够支持简单的单元测试和复杂的功能测试;
  • pytest 本身支持单元测试;
  • 可以结合 Requests 实现接口测试;
  • 结合 Selenium、Appium 实现自动化功能测试;
  • 使用 pytest 结合 Allure 集成到 Jenkins 中可以实现持续集成。工作中一般会使用持续集成来完成代码集成到主干分支之后的回归测试,通过自动化测试的手段来实现产品的快速迭代,同时还能保证产品的高质量。
  • pytest 支持 315 种以上的插件;

参考网站:

安装

代码语言:javascript
复制
pip install -U pytest

查看版本

代码语言:javascript
复制
pytest --version

在 Pycharm 中运行 pytest 用例

image
image

image1080×782 94.5 KB

打开 Pycharm → 设置 → Tools → Python Integrated Tools → Testing: pytest

首先次设置成 pytest ,需要安装 pytest,可以直接按照这个页面的提示点击“fix”,也可以在 Project interpreter 里面添加 pytest 依赖包。安装完 pytest 之后,编写的符合规则的测试用例都能被识别出来并且标出一个绿色的执行按钮,点击这个按钮也能执行某个方法或者某个类。例如:

image
image

Pycharm 设置运行方式为 pytest 之后,用例左侧会显示绿色按钮,可以直接点击这个按钮来执行这条用例。

用例的识别与运行

用例编写规范:

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

创建一个 python 文件,命名以 test_ 开头(或者以 _test 结尾),创建测试方法以 test_ 开头,测试类需要以 Test 开头。创建文件名为 test_add.py 文件,代码如下:

代码语言:javascript
复制
#!/usr/bin/env python# -*- coding: utf-8 -*-def add(x, y):    return x + ydef test_add():    assert add(1, 10) == 11    assert add(1, 1) == 2    assert add(1, 99) == 100class TestClass:    def test_one(self):        x = "this"        assert "h" in x    def test_two(self):        x = "hello"        assert hasattr(x, "check")   

运行 test_add.py 文件,在命令行进入到这个文件所在的路径,可以直接使用 pytest 命令运行,pytest 会找当前目录以及递查找子目录下所有的 test_*.py*_test.py 的文件,把其当作测试文件。在这些文件里,pytest 会收集符合编写规范的函数,类以及方法,当作测试用例并且执行,执行如下:

代码语言:javascript
复制
 $ pytest....test_add.py ..F  [100%]....self = <test_cases.test_add.TestClass object at 0x1091810d0>    def test_two(self):        x = "hello">       assert hasattr(x, "check")E       AssertionError: assert FalseE        +  where False = hasattr('hello', 'check')test_add.py:18: AssertionError===================================================== 1 failed, 2 passed in 0.05s ...

结果分析:执行结果中,F代表用例未通过(断言错误),.用例通过。如果有报错会有详细的错误信息。pytest 也支持 Unittest 模式的用例定义。

控制用例的执行顺序

pytest 加载所有的测试用例是乱序的,如果想指定用例的顺序,可以使用 pytest-order 插件,指定用例的执行顺序只需要在测试用例的方法前面加上装饰器 @pytest.mark.run(order=[num]) 设置order的对应的num值,它就可以按照 num 的大小顺序来执行。

应用场景:有时运行测试用例需要指定它的顺序,比如有些场景需要先运行完登录,才能执行后续的流程比如购物流程,下单流程,这时就需要指定测试用例的顺序。通过 pytest-ordering 这个插件可以完成用例顺序的指定。

安装
代码语言:javascript
复制
pip install pytest-ordering
案例

创建一个测试文件“test_order.py”,代码如下:

代码语言:javascript
复制
import pytestclass TestPytest(object):    @pytest.mark.run(order=-1)    def test_two(self):        print("test_two,测试用例")    @pytest.mark.run(order=3)    def test_one(self):        print("test_one,测试用例")    @pytest.mark.run(order=1)    def test_three(self):        print("\ntest_three,测试用例")

执行结果,如下查看执行顺序:

代码语言:javascript
复制
省略...plugins: html-2.0.1, rerunfailures-8.0, xdist-1.31.0, \ordering-0.6, forked-1.1.3, allure-pytest-2.8.11, metadata-1.8.0collecting ... collected 3 itemstest_order.py::TestPytest::test_three test_order.py::TestPytest::test_one test_order.py::TestPytest::test_two 省略...

从上面的执行结果可以看出,执行时以 order 的顺序执行:order=1,order=3,order=-1。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 安装
  • 在 Pycharm 中运行 pytest 用例
  • 用例的识别与运行
  • 控制用例的执行顺序
    • 安装
      • 案例
      相关产品与服务
      持续集成
      CODING 持续集成(CODING Continuous Integration,CODING-CI)全面兼容 Jenkins 的持续集成服务,支持 Java、Python、NodeJS 等所有主流语言,并且支持 Docker 镜像的构建。图形化编排,高配集群多 Job 并行构建全面提速您的构建任务。支持主流的 Git 代码仓库,包括 CODING 代码托管、GitHub、GitLab 等。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档