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

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. GO文件读写02---写文件

    缓冲式写入文件 func main034() { //创建并写入 //file, err := os.OpenFile("测试文件", os.O_CREATE|os.O_WRONL ...

  2. 《MySQL面试小抄》查询缓存机制终面

    <MySQL面试小抄>查询缓存机制终面 我是肥哥,一名不专业的面试官! 我是囧囧,一名积极找工作的小菜鸟! 囧囧表示:小白面试最怕的就是面试官问的知识点太笼统,自己无法快速定位到关键问题点 ...

  3. 无人驾驶汽车发展需要激光雷达和V2X技术

    无人驾驶汽车发展需要激光雷达和V2X技术

  4. mysql-8.0.16-winx64.zip安装教程详解

    摘自:https://zhuanlan.zhihu.com/p/48531203 mysql-8.0.16-winx64.zip安装教程详解下载地址:https://dev.mysql.com/get ...

  5. 一文搞懂Ajax,附Ajax面试题

    目录 前言 正文 Ajax是什么东西? 实现核心/工作原理:XMLHttpRequest对象 XMLHttpRequest大致用法 创建XMLHttpRequest对象 发送请求 服务器响应 1. r ...

  6. JDBC连接MongoDB

    pom文件中导入驱动 <!-- MongoDB驱动 --> <dependency> <groupId>org.mongodb</groupId> &l ...

  7. 深入理解java虚拟机笔记Chapter8

    运行时栈帧结构 栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈(Virtual Machine Stack)的栈元素.栈帧存储了方法 ...

  8. 【NX二次开发】根据根据坐标系、对象旋转视图旋转视图uc6434

    uc6434 (); //旋转视图 参数1:如果输入""则旋转当前工作视图参数2:1.按照ABS旋转视图.2.按照WCS选择视图.3.按照参数3旋转视图.4.按照参数4旋转视图参数 ...

  9. ES6中的字符串

    字符串在编程语言中,一直是使用率很高的数据,虽说函数在js语言中是一等公民,但是字符串,怎么也能算得上是千年老二,下面我就一起和大家探讨一下在es6中的一些新用法和特性,特别是在字符串拼接的时候,会解 ...

  10. 禁止特定IP访问Oracle数据库

    通过使用数据库服务器端的sqlnet.ora文件可以实现禁止指定IP主机访问数据库的功能,这对于提升数据库的安全性有很大的帮助,与此同时,这个技术为我们管理和约束数据库访问控制提供了有效的手段 在sq ...