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文件记录信息实现.人工介入.万能验证码.去 ...
随机推荐
- Docker学习(2) 安装
1 在Ubanru中安装 简单安装: 2 windows安装docker 3 OS X 安装docker
- Go语言流程控制02--选择结构之switch
package main import "fmt" /* @星座诊所2(switch) 根据用户输入的出生月份猜测其星座: ·白羊(4) 金牛(5) 双子(6) 巨蟹(7) 狮子( ...
- pytorch空间变换网络
pytorch空间变换网络 本文将学习如何使用称为空间变换器网络的视觉注意机制来扩充网络.可以在DeepMind paper 阅读更多有关空间变换器网络的内容. 空间变换器网络是对任何空间变换的差异化 ...
- 基于C语言文件操作的学生成绩管理系统
原理 在一个班级学生成绩管理系统中,希望处理每个学生的学习情况信息,其中包括学生的学号.姓名.各科名称和成绩等并能使管理人员通过界面完成对学生信息的录入及对学生信息的录入及对数据的查找.浏览.插入.排 ...
- 对SpringBoot和SpringCloud的理解
1.SpringCloud是什么 SpringCloud基于SpringBoot提供了一整套微服务的解决方案,包括服务注册与发现,配置中心,全链路监控,服务网关,负载均衡,熔断器等组件,除了基于Net ...
- Java面试题:==运算符与equals方法的区别
据说这个面试题目,80%的程序员都会理直气壮的回答错误!! 一: ==运算符 如果比较的是基本数据类型,则直接比较数值是否相等,返回值为"true or false" 如果比较的是 ...
- jmeter--文件上传和下载
文件下载 文件下载的method一般是get.本例中导出excel文件. 下载文件如果要求下载到本地,需要另写脚本.采用jsr223或者beashell PostProcessor都可以. 代码如下: ...
- ORA-01157:cannot identify/lock data file 6 - see DBWR trace file ORA-01110:data file 6:'/u01/app/oracle/oradata/PRDO2/sysaux02.dbf'
- [.NET Core知识点回顾]-自动内存管理
自动内存管理是公共语言运行时在托管执行过程中提供的服务之一.公共语言运行时的垃圾回收器为应用程序管理内存 的分配和释放.对开发人员而言,在开发托管应用程序时不必编写执行内存管理任务代码. 分配内存 初 ...
- Centos7搭建内网DNS服务器
一.配置阿里云yum源 执行脚本配置阿里云的yum源,已配置yum源的可以忽略 #!/bin/bash # ******************************************** ...