pytest是python语言中一款强大的单元测试框架,用来管理和组织测试用例,可应用在单元测试、自动化测试工作中。

unittest也是python语言中一款单元测试框架,但是功能有限,没有pytest灵活。

就像:苹果电脑mac air 和mac pro一样。都是具备同样的功能,但是好用,和更好用。

本文包含以下几个内容点:

1)pytest的简单示例

2)pytest的安装

3)pytest的特征、与unittest的区别。

4)  pytest如何自动识别用例。

5)pytest框架中,用例的运行顺序。

1)pytest写用例很简单,下面是一个简单的例子:

 import random

 def test_demo():
assert 7 == random.randint(0,10)

运行结果如下:

============================= test session starts =============================
platform win32 -- Python 3.7.2, pytest-4.6.3, py-1.8.0, pluggy-0.12.0
rootdir: D:\Pychram-Workspace\STUDY_PYTEST
plugins: allure-pytest-2.6.5, html-1.21.1, metadata-1.8.0, rerunfailures-7.0collected 1 item simple.py F
simple.py:10 (test_demo)
7 != 6 Expected :6
Actual :7 ========================== 1 failed in 0.14 seconds ===========================

2)pytest的安装

     安装命令:pip install pytest

3)pytest的特征、与unittest的区别。

    pytest的特征如下:

3.1  自动识别测试用例。(unittest当中,需要引入TestSuite,主动加载测试用例。)

3.2  简单的断言表达:assert 表达式即可。(unittest当中,self.assert*)

3.3  有测试会话、测试模块、测试类、测试函数级别的fixture。(unittest当中是测试类、测试函数级别的fixture)

3.4 有非常丰富的插件,目前在600+,比如allure插件。(unittest无)

3.5 测试用例不需要封装在测试类当中。(unittest中需要自定义类并继承TestCase)

那么pytest是如何自动识别测试用例的呢?我们在编写pytest用例的时候,需要遵守哪些规则呢?

  4)  pytest如何自动识别用例

   识别规则如下:

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

2、搜索规则:

1)搜索文件:符合命名规则 test_*.py 或者 *_test.py 的文件

2)在满足1)的文件中识别用例的规则:

2.1)以test_开头的函数名;

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

示例:在D:\pycharm_workspace目录下,创建一个python工程,名为study_pytest。在工程下,创建一个python包,包名为TestCases。

在包当中,创建一个测试用例文件:test_sample_1.py。文件内容如下:

 #!/usr/bin/python3
# -*- coding: utf-8 -*-
# Name: test_sample_1.py
# Author: 简
# Time: 2019/6/27 # 定义py文件下的测试用例
def test_sample():
print("我是测试用例!") class TestSample: def test_ss(self):
print("我也是测试用例!") def hello_pytest(self):
print("hi,pytest,我不是用例哦!!")

按照上面定义的搜索规则,需要跳转到工程目录,然后再执行命令:pytest -v 。 执行结果如下:

让我们愉快的加进来第2个测试文件:test_sample_2.py,内容如下:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Name: test_sample_2
# Author: 简
# Time: 2019/6/27 def add(a,*args):
sum = a
for item in args:
sum += item
return sum def test_add_two_number():
assert 33 == add(11,22)
assert 55.55 == add(22.22,33.33) def test_add_three_number():
assert 101 == add(10,90,1)

再次运行命令:pytest -v   得到如下结果:

通过多个用例文件的执行,可以看出用例的执行顺序。

 5)  pytest中用例的执行顺序

   原则:先搜索到的py文件中的用例,先执行。在同一py文件当中,按照代码顺序,先搜索到的用例先执行。

pytest系列(一):什么是单元测试界的高富帅?的更多相关文章

  1. Pytest系列(一)初次了解

    在之前,我分享过unittest系列,后来有很多人问我,能不能出pytest的教程,正好最近在整理pytest相关的资料,那么,就趁着这个机会,去和大家分享一下pytest系列. pytest是一个非 ...

  2. 单元测试系列之三:JUnit单元测试规范

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6762032.html Junit测试代 ...

  3. pytest系列(二):筛选用例新姿势,mark 一下,你就知道。

    pytest系列(一)中给大家介绍了pytest的特性,以及它的编写用例的简单至极. 那么在实际工作当中呢,我们要写的自动化用例会比较多,不会都放在一个py文件里. 如下图所示,我们编写的用例存放在不 ...

  4. Pytest系列(1) - 快速入门和基础讲解

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 目前有两种纯测试的测试框架, ...

  5. Pytest系列(2) - assert断言详细使用

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 与unittest不同,py ...

  6. Pytest系列(4) - fixture的详细使用

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 前面一篇讲了setup.te ...

  7. Pytest系列(5) - 用例执行的几种状态

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 用例执行状态 用例执行完成后,每条 ...

  8. Pytest系列(6) - conftest.py的详细讲解

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 什么是conftest.py 可以 ...

  9. Pytest系列(7) - skip、skipif跳过用例

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 pytest.mark.sk ...

随机推荐

  1. BZOJ 1003[ZJOI2006]物流运输(SPFA+DP)

    Problem 1003. -- [ZJOI2006]物流运输 1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: ...

  2. 使用@babel/preset-typescript取代awesome-typescript-loader和ts-loader

    前言 之前写过一篇旧React项目升级使用TypeScript的文章:在React旧项目中安装并使用TypeScript的实践. 博客里使用awesome-typescript-loader对Type ...

  3. 【Java Web开发学习】Spring MVC 使用HTTP信息转换器

    [Java Web开发学习]Spring MVC 使用HTTP信息转换器 转载:https://www.cnblogs.com/yangchongxing/p/10186429.html @Respo ...

  4. windows10查看电脑已经保存的wifi密码

    1,打开windows的命令窗口,输入    netsh wlan show profiles,如下图,这个命令仅仅只是查看一下电脑保存的所有的wifi名字 2,需要查看密码的话,则需要输入这个命令, ...

  5. 利用用阿里云API实现DDNS

    前言 之前动态域名解析是用的是腾达路由器上集成的第三方动态解析服务花生壳,解析费用一年40元.后来觉得域名前缀不好,想换掉,花生壳需要重新购买新的域名解析费用,增加1条或者2条动态解析无所谓,万一以后 ...

  6. nyoj 737 石子合并(区间DP)

    737-石子合并(一) 内存限制:64MB 时间限制:1000ms 特判: No通过数:28 提交数:35 难度:3 题目描述:     有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为 ...

  7. 《Java Spring框架》Spring切面(AOP)配置详解

    1.  Spring 基本概念 AOP(Aspect Oriented Programming)称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2 ...

  8. Redis中几个简单的概念:缓存穿透/击穿/雪崩,别再被吓唬了

    Redis中几个“看似”高大上的概念,经常有人提到,某些好事者喜欢死扣概念,实战没多少,嘴巴里冒出来的全是高大上的名词,个人一向鄙视概念党,呵呵! 其实这几个概念:缓存穿透/缓存击穿/缓存雪崩,有一个 ...

  9. RF之关键字、变量、循环

    关键字的使用: RF的能力是由关键字提供的,所以,我们必须对RF的常用关键字有个了解 . 最常用的关键字就在RF的关键字中.http://robotframework.org 其中Builtin是标准 ...

  10. webpack安装错误 ‘webpack : 无法加载文件’