python接口自动化测试 - unittest框架基本使用
unittest简单介绍
- 单元测试框架
- 还可以适用WEB自动化测试用例的开发与执行
- 提供丰富的断言方法
- 官方文档:https://docs.python.org/zh-cn/3/library/unittest.html
unittest基础使用
# 导入unittest模块
import unittest # 创建单元测试类,继承unittest.TestCase
class testCase(unittest.TestCase): def setUp(self):
print("case执行前") def tearDown(self):
print("case执行后") @classmethod
def setUpClass(cls):
print("对象执行前") @classmethod
def tearDownClass(cls):
print("对象执行后") # 测试用例
def test_01(self):
print("test01") def test_02(self):
print("test02") if __name__ == '__main__':
unittest.main()
运行结果
对象执行前
case执行前
test01
case执行后
case执行前
test02
case执行后
对象执行后 Ran 2 tests in 0.002s OK
这里包含的知识点:
unittest.Testcase
- 自己创建的单元测试类都要继承它,它是所有单元测试类的基类
setUp
- 用于每个测试用例执行前的初始化工作
- 所有类中方法的入参为 self ,定义实例变量也要 self.变量
tearDown
- 每个测试用例执行后的都会执行此方法
setUpClass
- 每个单元测试类运行前调用该方法,只会执行一次
- 属于类方法,需要加上装饰器 @classmethod
- 默认入参是 cls ,指的就是“类对象”本身,其实和self没什么区别,用法一致
tearDownClass
- 每个单元测试类运行后调用该方法,只会执行一次
- 属于类方法,需要加上装饰器 @classmethod
测试用例
- 必须以“test_”开头命名的方法,否则无法识别并执行
- 方法里面需要有断言,才能在最后运行时有该用例的执行结果
- 可包含多个测试用例
unittest.main()
- 运行单元测试
- 该命令会搜索当前module 下所有以 test开头的测试用例,并运行它们
- 执行顺序是按照case的命名
unitteest提供的各种断言方式
class testCase(unittest.TestCase):
def test_03(self):
# 断言 - 是否为True
flag = True
self.assertTrue(flag, msg="测试失败的信息,可不填")
def test_04(self):
# 断言 - 是否为False
flag = False
self.assertFalse(flag)
def test_05(self):
# 断言 - 提供的两个参数是否相同(任意类型)
self.assertEqual("", "") # 字符串
self.assertEqual({"a": 1}, {"a": 1}) # 字典
self.assertEqual([1, 2], [1, 2]) # 列表
self.assertEqual((1, 2), (1, 2)) # 元组
self.assertEqual({1, 2}, {1, 2}) # 集合
def test_06(self):
# 断言 - 列表是否相同
self.assertListtEqual([1, 2], [1, 2])
def test_07(self):
# 断言 - 字典是否相同
self.assertDictEqual({"a": 1}, {"a": 1})
def test_08(self):
# 断言 - 元组是否相同
self.assertTupleEqual((1, 2), (1, 2))
def test_09(self):
# 断言 - 集合是否相同
self.assertSetEqual({1, 2}, {1, 2})
这是比较常见的断言方式,当然还有一些比较容易理解的断言方式就没有一一举例啦,具体可以看看下面列表
|
方法 |
等同于python里面的写法 |
|
assertEqual(a, b) |
a == b |
|
assertNotEqual(a, b) |
a != b |
|
assertTrue(x) |
bool(x) is True |
|
assertFalse(x) |
bool(x) is False |
|
assertIs(a, b) |
a is b |
|
assertIsNot(a, b) |
a is not b |
|
assertIsNone(x) |
x is None |
|
assertIsNotNone(x) |
x is not None |
|
assertIn(a, b) |
a in b |
|
assertNotIn(a, b) |
a not in b |
|
assertIsInstance(a, b) |
isinstance(a, b) |
|
assertNotIsInstance(a, b) |
not isinstance(a, b) |
|
assertRegex(s, r) |
r.search(s) |
unittest测试用例跳过执行
class testCase(unittest.TestCase):
# 直接跳过
@unittest.skip("直接跳过")
def test_skip(self):
self.fail("shouldn't happen")
# 满足condition则跳过
@unittest.skipIf(1 < 2, "满足condition则跳过")
def test_skipIf(self):
print("skip if")
# 不满足condition则跳过
@unittest.skipUnless(sys.platform.startswith("win"), "需要window平台才不会跳过")
def test_skipUnless(self):
print("skip Unless")
# 预计该测试用例会测试失败
@unittest.expectedFailure
def test_fail(self):
self.assertEqual(1, 0, "broken")
# 方法体内跳出不执行case
def test_maybe_skipped(self):
if True:
self.skipTest("调用unittest的skipTest,在方法体内满足某些条件则跳过该case")
pass
运行结果
Skipped: 调用unittest的skipTest,在方法体内满足某些条件则跳过该case Skipped: 直接跳过 Skipped: 满足condition则跳过
skip Unless Ran 5 tests in 0.010s OK (skipped=3, expected failures=1)
跳过执行测试用例共有四种写法
- @unittest.skip(reason) :跳过测试用例,reason 为测试被跳过的原因
- @unittest.skipIf(condition, reason) :当 condition 为真时,跳过测试用例。
- @unittest.skipUnless(condition, reason) :跳过测试用例,除非 condition 为真
- @unittest.expectedFailure :把测试用例标记为预计失败;如果测试不通过,会被认为测试成功;如果测试通过了,则被认为是测试失败
self.skipTest(reason)
在方法体内满足某些条件下才跳过执行该测试用例
跳过执行测试用例注意点
- 被跳过的测试的 setUp() 和 tearDown() 不会被运行
- 只输入 unittest.skip ,也可以正常跳过,不必写reason
- 若输入 unittest.skip() ,括号内必须写reason,不得为空
- 可以针对单元测试类级别设置跳过执行(在class声明上面直接加装饰器即可),该单元测试类所有测试用例不会被执行
- 被跳过的类的 setUpClass() 和 tearDownClass() 不会被运行
- 当方法体内调用了 self.skipTest(reason) 方法,该测试用例还是会调用 setUp() 和 tearDown()
python接口自动化测试 - unittest框架基本使用的更多相关文章
- 记录python接口自动化测试--unittest框架基本应用(第二目)
在第一目里写了几个简单demo,并把调用get和post请求的方法封装到了一个类里,这次结合python自带的unittest框架,用之前封装的方法来写一个接口测试demo 1.unittest简单用 ...
- python接口自动化测试 - unittest框架suite、runner详细使用
test suite 测试套件,理解成测试用例集 一系列的测试用例,或测试套件,理解成测试用例的集合和测试套件的集合 当运行测试套件时,则运行里面添加的所有测试用例 test runner 测试运行器 ...
- Python接口测试之unittest框架(五)
Test-driven development(TDD)开发模式在今天已经不是什么新奇的事了,它的开发思维是在开发一个产品功能的时候,先 编写好该功能的测试代码,在编写开发比如,比如要写二个数相除的函 ...
- Python接口自动化测试框架实战 从设计到开发
第1章 课程介绍(不要错过)本章主要讲解课程的详细安排.课程学习要求.课程面向用户等,让大家很直观的对课程有整体认知! 第2章 接口测试工具Fiddler的运用本章重点讲解如何抓app\web的htt ...
- selenium + python自动化测试unittest框架学习(二)
1.unittest单元测试框架文件结构 unittest是python单元测试框架之一,unittest测试框架的主要文件结构: File >report >all_case.py &g ...
- 基于Python接口自动化测试框架+数据与代码分离(进阶篇)附源码
引言 在上一篇<基于Python接口自动化测试框架(初级篇)附源码>讲过了接口自动化测试框架的搭建,最核心的模块功能就是测试数据库初始化,再来看看之前的框架结构: 可以看出testcase ...
- python接口自动化测试二十七:密码MD5加密 ''' MD5加密 ''' # 由于MD5模块在python3中被移除 # 在python3中使用hashlib模块进行md5操作 import hashlib # 待加密信息 str = 'asdas89799,.//plrmf' # 创建md5对象 hl = hashlib.md5() # Tips # 此处必须声明encode # 若写法为
python接口自动化测试二十七:密码MD5加密 ''' MD5加密 '''# 由于MD5模块在python3中被移除# 在python3中使用hashlib模块进行md5操作import has ...
- python接口自动化测试七:获取登录的Cookies
python接口自动化测试七:获取登录的Cookies,并关联到下一个请求 获取登录的cookies:loginCookies = r.cookies 把获取到的cookies传入请求:cooki ...
- 基于Python接口自动化测试框架(初级篇)附源码
引言 很多人都知道,目前市场上很多自动化测试工具,比如:Jmeter,Postman,TestLink等,还有一些自动化测试平台,那为啥还要开发接口自动化测试框架呢?相同之处就不说了,先说一下工具的局 ...
随机推荐
- php 对接国外支付 ipay88支付
ipay88支付 近期接了一个国外的项目,客户指定要这种支付,就搞搞呗,其实流程和思路都是差不多的,往下看 他的流程其实非常简单 下面的流程仔细看看,看懂了就会了 1 首先我们需要先获取下单所需要的 ...
- 创建spring boot 项目
1.新建Spring Starter Project(需要连接外网) 2.选择web 3.点击完成,生成maven项目 pom文件默认有一些依赖,但是有一个地方报错,<parent>节点报 ...
- Chrome 提标 您的浏览器限制了第三方Cookie...解决方法
最近升级Chrome后会出现 您的浏览器限制了第三方Cookie,这将影响您正常登录,您可以更改浏览器的隐私设置,解除限制后重试. 解决方法: chrome://flags/ 把这句复制到浏览器回车 ...
- 并查集路径分裂优化 UnionFind PathSpliting(C++)
/* * UnionFind.h * 有两种实现方式,QuickFind和QuickUnion * QuickFind: * 查找O(1) * 合并O(n) * QuickUnion:(建议使用) * ...
- MyBatis使用步骤及原理
主要讲解MyBatis-基本使用步骤 回顾: MyBatis是一个数据持久层(ORM)框架.把实体 类和SQL语句之间建立了映射关系,是一种半自 动化的ORM实现.MyBATIS需要 ...
- 计算a除b的第一位小数 in C++.
my codes: #include<iostream> #include<cstdio> using namespace std; int main() { int a,b; ...
- 剑指offer 面试题 删除链表中重复的节点
题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...
- js基础 之 引用类型
引用类型的值(对象)是引用类型的一个实例.引用类型是一种数据结构,用于将数据和功能组织在一起 对象是某个特定引用类型的实例.新对象是使用new操作符后跟一个构造函数来创建的.构造函数本身就是一个函数, ...
- 使用fetch进行数据请求时报json错误
使用fetch进行数据请求返回response对象,response.json报错.原因是response中含有特殊字符. fetch(url).then(response => respons ...
- Django中间件,CSRF(跨站请求伪造),缓存,信号,BootStrap(模板)-响应式(栅格)+模板
Django中间件,CSRF(跨站请求伪造),缓存,信号,BootStrap(模板)-响应式(栅格)+模板 1.中间件(重要): 在Django的setting中有个MIDDLEWARE列表,里面的东 ...