手把手教你pytest测试框架—— 初识框架

Posted 程序员二黑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手把手教你pytest测试框架—— 初识框架相关的知识,希望对你有一定的参考价值。

pytest测试框架

简介

pytest是Python的测试框架,类似于unittest,但比unittest更简洁,直接,易上手,功能更强大,且可兼容unittest的代码。

它可以实现,执行用例时跳过某些用例、用例执行失败后可重新执行、对执行失败的用例进行标记等。

pytest有丰富的第三方插件,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等。

pytest还支持自定义扩展。

安装

pip install pytest

安装后,可通过pytest –version命令查看版本

文件、类及函数命名及书写规则

使用pytest,文件、类、函数不能随意命名,必须按照其规则进行命名,否则pytest无法识别。

  1. 测试文件以test_开头(以_test结尾也可)
  2. 测试类以Test开头,注意,Test首字母要大写
  3. 测试类名称后面直接跟冒号,而不能有()
  4. 测试类不能带有 init 方法
  5. 测试类里的每个函数都必须有参数(self)
  6. 测试函数以test_开头,注意,这时首字母要小写
  7. 断言使用基本的assert即可

一个简单的pytest实践

先创建一个文件叫做test_study.py,注意文件名是以test_开头的,符合pytest规则,在这个文件里写一段简单的程序:


# coding=utf-8

def func(x):
    return x + 1

def test_answer():
    assert func(3) == 5

在这里,test_answer()是以test_开头的,这符合规则,但func(x)则无需按规则命名,因为我们测试的是test_answer()函数,如果想测试func(x)函数,那么也需把它按规则命名

无需import pytest,写完两个函数后也无需调用它们,注意,第二个函数里面调用了第一个函数,且使用了断言,且故意使断言语句发生错误,func(3)的正确值应为4,但故意写成5以制造一个错误

执行的时候,不要在pycharm里直接执行,要在pycharm的terminal里或以管理员身份在命令行窗口里输入pytesttest_study.py(执行方式实际不止这两种,实际是三种,后文书介绍)

执行结果
terminal:


命令行:


二者的结果是一样的,其中有如下结果:

    def test_answer():

>       assertfunc(3) == 5

E       assert 4 == 5

E        +  where 4 = func(3)

它告诉我们,def test_answer()这个函数发生错误,断言应为4,但实际给的值是5。

执行方式

Terminal执行

第一是在pycharm的Terminal里输入命令来执行,如pytest -s test_study.py -m=mn1
以管理员身份在命令行执行

第二是以管理员身份在命令行窗口里输入命令来执行,如pytest -stest_study.py -m=mn1

main语句块执行

第三是在python代码本身里执行,这种方式需要:

  1. 把命令写到main语句块里
  2. 在pytest后面加上.main
  3. 把参数、文件名称用引号引起来
    如pytest.main([“-s”,“test_study.py”, “-m=mn1”])

调用执行

如果把调用语句单独写出来,并且不放到main语句块里,那么也是可以执行用例的,比如下面的写法:

# coding=utf-8
import pytest

class Test_case():
    def test_case4(self):
        print("执行用例4")

    def test_case5(self):
        print("执行用例5")

pytest.main(["-s"])

但是这种写法很容易出错,经常会把用例执行多遍,原因尚不明,所以要杜绝这种写法,解决这个问题的方法有两种:

  1. 把执行语句单独放到一个文件里,如下面的写法:

    直接执行这个文件,就可以正确执行相应的用例了。

  2. 把执行语句封装成函数,再调用这个函数,如下面写法:

    execute.py文件里封装了执行语句,再在main.py里调用它:


这样就可以了。

特别注意:如果采用了以上两种方法,仍然出现用例执行多遍的现象,通常是在某个文件里的main语句块外写上了执行语句,再强调一遍,那种写法容易造成用例执行多遍,必须严格杜绝。

需要注意的一个问题

不论是在Terminal、命令行,还在main语句块里,输入执行命令时等号两端都不能有空格,如这样:“-m = mn1”。

虽然等号两端加空格在python里是一种常用写法,但在使用pytest时则不被语法允许,尤其要注意当在main语句块里写命令的时候,由于就是在代码中去写,所以很容易习惯性地把等号两端加上空格。(未完待续)

学习资源分享

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走

这些资料,对于想进阶【自动化测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…….

关注下方我的公众号免费获取!

以上是关于手把手教你pytest测试框架—— 初识框架的主要内容,如果未能解决你的问题,请参考以下文章

单元测试界的高富帅,Pytest框架,手把手教学,以后测试报告就这么做~

单元测试界的高富帅,Pytest框架,手把手教学,以后测试报告就这么做~

单元测试界的高富帅,Pytest框架,手把手教学,从入门到精通

单元测试界的高富帅,Pytest框架,手把手教学,从入门到精通

手把手教你用Eclipse+TestNG搭建接口自动化测试框架

《手把手教你》系列基础篇(七十二)-java+ selenium自动化测试-框架设计基础-TestNG简单介绍(详解教程)