python使用笔记28--unittest单元测试框架
单元测试:开发程序的人自己测试自己的代码
unittest自动化测试框架
1、单元测试
unittest框架,执行的顺序是按照方法名的字母来排序的
setUpClass方法是最开始执行的
tearDownClass是最后执行的
setUp方法是在每个方法执行前执行的
tearDown方法是在每个方法执行后执行的
1 import unittest
2 def add(a,b):
3 return a+b
4
5 #运行的顺序是按照方法名的字母排序的
6 class AddTest(unittest.TestCase):#继承unittest
7 def setUp(self):#在每个方法前执行
8 print('我是set up方法')
9
10 def tearDown(self):#在每个方法后执行
11 print('我是tearDown方法')
12
13 @classmethod
14 def setUpClass(cls):#最先开始执行的
15 print('我是setupclass方法')
16
17 @classmethod
18 def tearDownClass(cls):#最后执行的
19 print('我是tearDownclass方法')
20
21 def test_add_normal(self):
22 print('add_normal')
23 result = add(1,4)
24 self.assertEqual(5,result)#预期结果,实际结果
25
26 def test_add_error(self):
27 print('add_error')
28 result = add(1,1)
29 yq=1
30 self.assertEqual(yq,result,'add测试结果不通过,预计结果为%s,实际结果为%s'%(yq,result))
31
32 def test_a(self):
33 print('a')
34
35 def test_b(self):
36 print('b')
37
38 unittest.main()#运行当前python文件中的所用用例
2、产生测试报告
2.1 HTMLTestRunner
下载HTMLTestRunner.py放到python的环境变量里
1 import unittest
2 import HTMLTestRunner
3 import nnreport
4
5 class TestLogin(unittest.TestCase):
6 def test_login_normal(self):
7 '''正常登录'''
8 self.assertEqual(1,1)
9 def test_login_black_list(self):
10 '''黑名单用户登录'''
11 self.assertTrue(False,'黑名单登录运行失败')
12 def test_login_exit(self):
13 '''注销用户登录'''
14 self.assertNotIn(1,[1,2,3],'这是not in 的')
15
16 def test_login_max_count(self):
17 '''超过最大错误次数登录'''
18 self.assertNotEqual(1,2,'这是不相等的')
19
20
21 # suite = unittest.TestSuite()#测试集合,手动一个个的把测试用例加入到测试集合中
22 # suite.addTest(TestLogin('test_login_normal'))#加一个测试用例
23 suite = unittest.makeSuite(TestLogin)#将整个测试用例都放进集合中
24
25 #HTMLTestRunner
26 f = open('测试报告.html','wb')
27 runner = HTMLTestRunner.HTMLTestRunner(f,title='登录接口测试报告',description='这个是登录接口的测试报告')
28 runner.run(suite)
29 f.close()
测试报告如何打开:
1.选中文件--右键--Copy Path...--拷贝路径--放到浏览器中打开
2.双击测试报告--在测试报告的html脚本中移动鼠标--会弹出浏览器的选项--选择对应的浏览器打开
执行的测试报告如图所示:

2.2 nnreport
pip install nnreport
1 import unittest
2 import HTMLTestRunner
3 import nnreport
4
5 class TestLogin(unittest.TestCase):
6 def test_login_normal(self):
7 '''正常登录'''
8 self.assertEqual(1,1)
9 def test_login_black_list(self):
10 '''黑名单用户登录'''
11 self.assertTrue(False,'黑名单登录运行失败')
12 def test_login_exit(self):
13 '''注销用户登录'''
14 self.assertNotIn(1,[1,2,3],'这是not in 的')
15
16 def test_login_max_count(self):
17 '''超过最大错误次数登录'''
18 self.assertNotEqual(1,2,'这是不相等的')
19
20
21 # suite = unittest.TestSuite()#测试集合,手动一个个的把测试用例加入到测试集合中
22 # suite.addTest(TestLogin('test_login_normal'))#加一个测试用例
23 suite = unittest.makeSuite(TestLogin)#将整个测试用例都放进集合中
24
25 #BeautifulReport
26 runner = nnreport.BeautifulReport(suite)
27 runner.report(description='登录接口测试报告',filename='login_report.html',log_path='D:\\')#描述,文件名,指定路径
测试报告如图所示:


2.3 查找测试报告
一个文件夹下有多个测试的python文件

1 import unittest
2 import nnreport
3
4 #在当前路径下,写名字
5 #不在当前路径下,写绝对路径
6 #test*.py制定一个查找规则,只找test开头的python文件,默认是test开头的python文件
7 suite = unittest.defaultTestLoader.discover('cases','test*.py')
8 report = nnreport.BeautifulReport(suite)
9 report.report(description='查找测试用例的测试报告',filename='查找测试用例的测试报告.html')
执行结果如图:

3、参数化
代码驱动:用例都是代码写的
数据驱动:用例是根据数据来执行的
关键字驱动:UI自动化的时候会用到
pip install parameterized
3.1 固定参数
1 class stuInfoTest(unittest.TestCase):
2 url = 'http://api.nnzhp.cn/api/user/stu_info'
3
4 @parameterized.parameterized.expand([
5 ['王月',18],
6 ['小黑',11],
7 ['小白',13],
8 ['小慧',29],
9 ['小兰',98]
10 ])
11 def test_single1(self,name,age):
12 data = {'stu_name':name,'age':age}
13 r = requests.get(self.url,data)
14 print(r.json())
3.2 文件参数
1 import unittest
2 import requests
3 import parameterized
4 import os
5
6 class Get_Data:
7 @staticmethod
8 def read_data_to_file(file_name):
9 datas = []
10 if os.path.exists(file_name):
11 with open(file_name,'r',encoding='utf-8') as fr:
12 for line in fr:
13 d1 = line.strip().split(',')
14 datas.append(d1)
15 else:
16 raise FileNotFoundError('参数化文件找不到')
17
18 return datas
19
20 @staticmethod
21 def read_data_to_excel(file_name):
22 pass
23
24 @staticmethod
25 def read_data_to_redis():
26 pass
27
28 # result = read_data('stu_info.txt')
29 # print(result)
30 # quit()
31
32
33 class stuInfoTest(unittest.TestCase):
34 url = 'http://api.nnzhp.cn/api/user/stu_info'
37 #有多少条数据,就执行多少次
38 @parameterized.parameterized.expand(Get_Data.read_data_to_file('stu_info.txt'))
39 def test_single(self,name,age):
40 print(name)
41 data = {'stu_name':name,'age':age}
42 r = requests.get(self.url,data)
43 print(r.json())
python使用笔记28--unittest单元测试框架的更多相关文章
- Python+Selenium学习笔记16 - unittest单元测试框架
unittest单元测试框架包括 Test Case, Test Suite, Test Runner, Test Fixture Test Cases 组成Test Suite, Test Run ...
- python学习笔记:unittest单元测试
单元测试:开发自测时写的代码 unittest基本原理: ♦整个平台的搭建使用的是python的unittest测试框架,这里简单介绍下unittest模块的简单应用. ♦unittest是pytho ...
- 基于Python的接口自动化-unittest测试框架和ddt数据驱动
引言 在编写接口自动化用例时,我们一般针对一个接口建立一个.py文件,一条接口测试用例封装为一个函数(方法),但是在批量执行的过程中,如果其中一条出错,后面的用例就无法执行,还有在运行大量的接口测试用 ...
- Python+selenium之简单介绍unittest单元测试框架
Python+selenium之简单介绍unittest单元测试框架 一.unittest简单介绍 unittest支持测试自动化,共享测试用例中的初始化和关闭退出代码,在unittest中最小单元是 ...
- unittest (python标准库-开发工具-单元测试框架)
unittest官方文档摘录 翻译 reffer to: https://docs.python.org/3/library/unittest.html#unittest.TextTestRunner ...
- Python+Selenium框架设计篇之-简单介绍unittest单元测试框架
前面文章已经简单介绍了一些关于自动化测试框架的介绍,知道了什么是自动化测试框架,主要有哪些特点,基本组成部分等.在继续介绍框架设计之前,我们先来学习一个工具,叫unittest. unit ...
- Python+Selenium ----unittest单元测试框架
unittest是一个单元测试框架,是Python编程的单元测试框架.有时候,也做叫做“PyUnit”,是Junit的Python语言版本.这里了解下,Junit是Java语言的单元测试框架,Java ...
- UI自动化学习笔记- UnitTest单元测试框架详解
一.UnitTest基本使用 1. UnitTest框架 1.1 什么是框架 说明: 框架英文单词frame 为解决一类事情的功能集合 1.2什么是UnitTest框架 概念:UnitTest是pyt ...
- Selenium+Python ---- 免登录、等待、unittest单元测试框架、PO模型
1.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...
- Selenium基于Python web自动化基础二 -- 免登录、等待及unittest单元测试框架
一.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...
随机推荐
- 通过Maven打jar包&运行
运行命令:java -jar [包名] https://www.cnblogs.com/jinjiyese153/p/9374015.html
- 4D毫米波雷达Radar
4D毫米波雷达Radar 围绕雷达.激光雷达.高精定位等新一代传感器技术将会进入量产周期. 自动驾驶公司的竞争,在传感器配置上坦白说并没有太多差异化.除了车载激光雷达属于近几年的产物,类似摄像头.毫米 ...
- Docker基本原理概述
Docker基本原理概述 Docker是一个用于开发,交付和运行应用程序的开放平台.Docker能够将应用程序与基础架构分开,从而可以快速交付软件.借助Docker,可以以与管理应用程序相同的方式来管 ...
- Redis系列(四):地理信息
除了Bitmaps和HyperLogLog,Redis还提供了关于地理空间的相关操作,主要是经纬度.Redis提供的地理信息操作是有误差的,最大误差可能会达到5%.Redis提供的Geo的操作如下: ...
- P5960 【模板】差分约束算法
题目描述 给出一组包含 $m$ 个不等式,有 $n$ 个未知数的形如: 的不等式组,求任意一组满足这个不等式组的解. 输入格式 第一行为两个正整数 $n,m$,代表未知数的数量和不等式的数量. 接下来 ...
- Jenkins 进阶篇 - 数据备份
随着我们的长期使用,Jenkins 系统中的内容会越来越多,特别是一些配置相关的东西,不能有任何丢失.这个时候我们就需要定期备份我们的 Jenkins 系统,避免一些误操作不小心删除了某些重要文件,J ...
- Sai学习笔记
颜色模块的功能介绍 色轮 RGB滑块 HSV滑块(常用) H:色相 S:纯度 V:明度 中间色条,主要用来混色 颜料盒 调色板 选择工具的使用 选择框 快捷键:Ctrl+D 套索 魔棒 图文工具使用 ...
- Unity中的.Meta文件
.meta文件是用于辅助管理Unity资源文件的文件,删除后,Unity会自动生成,里面记录了各个资源Inspector的信息,属性等等,Unity是不会改变源资源文件的,没有意义,它是靠.meta文 ...
- 尝鲜一试,Azure静态网站应用服务(Azure Static Web Apps) 免费预览,协同Github自动发布静态SPA
背景 最近在浏览微软的文档的时候发现,微软喜欢用Hugo这个文档框架,有些技术产品的文档页面就用Hugo来做的,同时搭配Github + Azure Static Web Apps Service这个 ...
- .net core 常用rsa 加签类
using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Math ...