单元测试:开发程序的人自己测试自己的代码

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单元测试框架的更多相关文章

  1. Python+Selenium学习笔记16 - unittest单元测试框架

    unittest单元测试框架包括 Test Case,  Test Suite, Test Runner, Test Fixture Test Cases 组成Test Suite, Test Run ...

  2. python学习笔记:unittest单元测试

    单元测试:开发自测时写的代码 unittest基本原理: ♦整个平台的搭建使用的是python的unittest测试框架,这里简单介绍下unittest模块的简单应用. ♦unittest是pytho ...

  3. 基于Python的接口自动化-unittest测试框架和ddt数据驱动

    引言 在编写接口自动化用例时,我们一般针对一个接口建立一个.py文件,一条接口测试用例封装为一个函数(方法),但是在批量执行的过程中,如果其中一条出错,后面的用例就无法执行,还有在运行大量的接口测试用 ...

  4. Python+selenium之简单介绍unittest单元测试框架

    Python+selenium之简单介绍unittest单元测试框架 一.unittest简单介绍 unittest支持测试自动化,共享测试用例中的初始化和关闭退出代码,在unittest中最小单元是 ...

  5. unittest (python标准库-开发工具-单元测试框架)

    unittest官方文档摘录 翻译 reffer to: https://docs.python.org/3/library/unittest.html#unittest.TextTestRunner ...

  6. Python+Selenium框架设计篇之-简单介绍unittest单元测试框架

    前面文章已经简单介绍了一些关于自动化测试框架的介绍,知道了什么是自动化测试框架,主要有哪些特点,基本组成部分等.在继续介绍框架设计之前,我们先来学习一个工具,叫unittest.       unit ...

  7. Python+Selenium ----unittest单元测试框架

    unittest是一个单元测试框架,是Python编程的单元测试框架.有时候,也做叫做“PyUnit”,是Junit的Python语言版本.这里了解下,Junit是Java语言的单元测试框架,Java ...

  8. UI自动化学习笔记- UnitTest单元测试框架详解

    一.UnitTest基本使用 1. UnitTest框架 1.1 什么是框架 说明: 框架英文单词frame 为解决一类事情的功能集合 1.2什么是UnitTest框架 概念:UnitTest是pyt ...

  9. Selenium+Python ---- 免登录、等待、unittest单元测试框架、PO模型

    1.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...

  10. Selenium基于Python web自动化基础二 -- 免登录、等待及unittest单元测试框架

    一.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...

随机推荐

  1. Jmeter(五十) - 从入门到精通高级篇 - jmeter 之模拟弱网进行测试(详解教程)

    1.简介 在实际工作中,网络带宽一定不会是持续稳定的保持某一个值,而是有高有低.因此为了测试场景和实际能够无限的接近,所以我们需要模拟一下来达到效果.还有就是在实际的测试工作中,会因为业务需要,有时限 ...

  2. 学妹问,学网站开发还是打 ACM?

    聊聊我的选择 大家好,我是鱼皮,前几天看到一位大一计科同学的问题:我想学做 Web 项目,又想学算法搞 ACM,如何取舍呢 ? ACM 是国际大学生程序设计竞赛,旨在展示大学生创新能力.团队精神.编写 ...

  3. ICCV2019论文点评:3D Object Detect疏密度点云三维目标检测

    ICCV2019论文点评:3D Object Detect疏密度点云三维目标检测 STD: Sparse-to-Dense 3D Object Detector for Point Cloud 论文链 ...

  4. TensorRT PoolingLayer

    TensorRT PoolingLayer IPoolingLayer在通道中实现池.支持的池类型有maximum.average和maximum average混合. Layer Descripti ...

  5. javaBean命名规范 get / set 后的首字母大写

    javaBean命名规范 Sun 推荐的命名规范 1 ,类名要首字母大写,后面的单词首字母大写 2 ,方法名的第一个单词小写,后面的单词首字母大写 3 ,变量名的第一个单词小写,后面的单词首字母大写 ...

  6. centos 7查看系统网络情况netstat

    查看系统网络情况 netstat ➢ 基本语法 netstat [选项] ➢ 选项说明 -an 按一定顺序排列输出 -p 显示哪个进程在调用 应用案例 请查看服务名为 sshd 的服务的信息. ➢ N ...

  7. WebClient (史上最全)

    疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 面试必备 + 面试必备 [博客园总入口 ] 疯狂创客圈 经典图书 : <Sprin ...

  8. 「csp-s模拟测试(9.18)」Set·Read·Race

    昨天考试考得有点迷??? 一看内存限制,T1 64MB T2 16MB 当场懵比......... T1 set 考场打的背包问题和随机化,其实能randA掉,但不小心数组开小了????(长记性!!! ...

  9. 办公利器!用Python批量识别发票并录入到Excel表格

    辰哥今天来分享一篇办公干货文章:用Python批量识别发票并录入到Excel表格.对于财务专业等学生或者公司财务人员来说,将报账发票等汇总到excel简直就是一个折磨. 尤其是到年底的时候,公司的财务 ...

  10. ES6学习笔记之字符串新增方法

    1.字符串的子串识别 传统上,Javascript 只有indexof 方法,用来确定一个字符串是否包含在另一个字符串中.如: //indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的 ...