Python unittest单元测试openpyxl实现过程解析


Posted in Python onMay 27, 2020

一。初识单元测试

1)定义:

单元:函数或者是类
单元测试:测试类或者函数

python内置的单元测试框架:unittest

2)单元测试的意义

好处:投入小,收益大。能够精准的,更早的发现问题。

3)单元测试与测试关系

python 很难测试 java 的单元。
关键是单元测试一般是开发或者测试开发做的。

测试一般会在集成、系统、验收进行测试

4)unittest的注意事项:

1.模块名需要以 test_ 开头

2.类名:以 Test 开头

3.测试用例的方法名称以 test_ 开头

4.单元测试写入方式(其中TestLogin是测试模块):TestLogin(unittest.TestCase)

5)如何写测试用例

#首先需要引入单元测试框架
import unittest
#login模块校验规则
def login(username=None, password=None):
  """登录"""
  if (not username) or (not password):
    # 用户名或者密码为空
    return {"msg": "empty"}
  if username == 'yuz' and password == '123456':
    # 正确的用户名和密码
    return {"msg": "success"}
  return {"msg": "error"}

#单元测试用例
class TestLogin(unittest.TestCase):
  def setUp(self):
    pass
  def tearDown(self):
    pass
  #登录账号与密码为空
  def test_login_01_null(self):
    username=''
    password=''
    expected_result={"msg": "empty"}
    actual_result=login(username,password)
    self.assertTrue(expected_result == actual_result)

  #登录账号为空
  def test_login_02_usernull(self):
    username=''
    password='123456'
    expected_result={"msg": "empty"}
    actual_result=login(username,password)
    self.assertTrue(expected_result == actual_result)

  #登录密码为空
  def test_login_03_passwordnull(self):
    username='yuz'
    password=''
    expected_result={"msg": "empty"}
    actual_result=login(username,password)
    self.assertTrue(expected_result == actual_result)
  #正常登录
  def test_login_04_correct(self):
    username = 'yuz'
    password = '123456'
    expected_result = {"msg": "success"}
    actual_result = login(username, password)
    self.assertEqual(expected_result,actual_result)

  #账号输入错误
  def test_login_05_usererro(self):
    username = 'linzai'
    password = '123456'
    expected_result = {"msg": "error"}
    actual_result = login(username, password)
    self.assertTrue(expected_result == actual_result)

  #密码输入错误
  def test_login_06_usererro(self):
    username = 'yuz'
    password = '12345698'
    expected_result = {"msg": "error"}
    actual_result = login(username, password)
    self.assertTrue(expected_result == actual_result)

  #账号与密码都错误
  def test_login_07_userpassworderror(self):
    username='linzai'
    password='laksls'
    expected_result={"msg": "error"}
    actual_result=login(username,password)
    self.assertTrue(expected_result == actual_result)

#执行方法
if __name__ == '__main__':
  unittest.main()

6)测试用例执行顺序

采取ASCII标准按顺序进行执行

Python unittest单元测试openpyxl实现过程解析

二。单元深入了解。(用例执行、组织、收集、运行流程)

1。用例执行

  • 1)右击 unittest 运行(在.py文件中)
  • 2)python 运行 unittest.main()
  • 3) 运行所有的测试用例(控制台直接执行 : python test...py)

2.用例组织

会把测试用例的代码放到一个统一的文件夹当中或者目录当中。

如下:

Python unittest单元测试openpyxl实现过程解析

3.测试用例收集

需要把每个测试用例模块当中的测试用例收集到一起,一起执行。

1)方法一:(创建一个测试用例加载器,使用discover 收集所有用例)

#初始化一个测试用例加载器
loder=unittest.TestLoader()
#先拿到该.py文件的绝对路径
file_path=os.path.abspath(__file__)
#拿到测试模块的路径
case_path=os.path.join(os.path.dirname(file_path),'test')
#使用loder收集所有的测试用例
test_suit=loder.discover(case_path)
print(test_suit)

运行结果(discover收集的内容是一个列表,如下图):

Python unittest单元测试openpyxl实现过程解析

Python unittest单元测试openpyxl实现过程解析

[<unittest.suite.TestSuite tests=[<unittest.suite.TestSuite tests=[<test_login.TestLogin testMethod=test_login_01_null>, <test_login.TestLogin testMethod=test_login_02_usernull>, <test_login.TestLogin testMethod=test_login_03_passwordnull>, <test_login.TestLogin testMethod=test_login_04_correct>, <test_login.TestLogin testMethod=test_login_05_usererro>, <test_login.TestLogin testMethod=test_login_06_usererro>, <test_login.TestLogin testMethod=test_login_07_userpassworderror>]>]>, <unittest.suite.TestSuite tests=[]>, <unittest.suite.TestSuite tests=[]>]>

2)方法二(创建一个测试用例加载器loder,加载测试用例创建测试集并对用例进行添加):

from class_16_unittest单元测试集及报告.test import test_login,test_register
loder=unittest.TestLoader()
case_path=os.path.join(os.path.dirname(os.path.abspath(__file__)),'test')
#加载测试用例
suite_login=loder.loadTestsFromModule(test_login)
suite_register=loder.loadTestsFromModule(test_register)
#初始化一个测试集合 suite
suite_total=unittest.TestSuite()
#添加测试用例
suite_total.addTest(suite_login)
suite_total.addTest(test_register)

4.运行流程

1)执行方法一,没有测试报告(使用的是测试用例收集方法二进行的执行):

runner = unittest.TextTestRunner()
runner.run(suite_total)

运行结果:

Python unittest单元测试openpyxl实现过程解析

2)执行方法二,有测试报告:

1.自带的测试报告(TextTestRunner)

with open("test_result.txt",'w',encoding='utf-8') as f:
  runner = unittest.TextTestRunner(f)
  runner.run(suite_total)

运行结果:

Python unittest单元测试openpyxl实现过程解析

Python unittest单元测试openpyxl实现过程解析

2.HTMLTestRunner(测试报告模板)

with open("test_result.html",'wb') as f:
  runner = HTMLTestRunner(f,
              title='测试title',
              description="测试报告的描述",
              tester='测试人'
              )
  runner.run(suite_total)

运行结果:[/code]

Python unittest单元测试openpyxl实现过程解析

Python unittest单元测试openpyxl实现过程解析

三。openpyxl

1.安装与使用范围

安装:pip install openpyxl

范围(2003年后):xlsx

xls格式:需要用xlrd, xlwt

2.使用

导入

import openpyxl
from openpyxl.worksheet.worksheet import Worksheet
#打开文件
workbook=openpyxl.load_workbook('cases.xlsx')
# print(workbook)

#获取表单名

1)#sheet : Worksheet 可以获取到 对应得表单名字
sheet : Worksheet=workbook['Sheet1']
# print(sheet)
2)#方法二,通过表单名或者排列顺序获得操作表单
sheet=workbook['Sheet1']
#根据位置获取操作表单名称
sheet=workbook.worksheets[0]

#获取数据
1)#根据表单行列获取表单对象,row:行 column:列

cell=sheet.cell(row=2,column=3)

print(cell)
#获取表单数据
print(cell.value)
运行结果:
excel表信息:

Python unittest单元测试openpyxl实现过程解析

Python unittest单元测试openpyxl实现过程解析

2)#根据最大行列,进行获取数据,使用嵌套循环的方法把表单数据一行一行的化为列表返回

注意:

Python unittest单元测试openpyxl实现过程解析

#获取表单的最大行数
row_max=sheet.max_row
#获取最大列数
cloumn_max=sheet.max_column

#使用嵌套循环的方式,精准的拿到每一个坐标的对象,然后转化为值
row_data=[]
for row in range(1,row_max+1):
  cloumn_data=[]
  for cloumn in range(1,cloumn_max+1):
    #print(sheet.cell(row,cloumn))
    cloumn_data.append(sheet.cell(row,cloumn).value)
  row_data.append(cloumn_data)
print(row_data)
#运行结果:

Python unittest单元测试openpyxl实现过程解析

3)#根据最大行列,进行获取数据,使用嵌套循环的方法把表单数据一行一行的化为dict返回

#获取第一行表单对象
sheet[1]
#可以与切片一起获取固定行的对象
sheet[1:]


row_data=[]
#获取第一行的所有值
header=[c.value for c in sheet[1]]
for row in range(2,row_max+1):
  cloumn_data=[]
  for cloumn in range(1,cloumn_max+1):
    #print(sheet.cell(row,cloumn))
    cloumn_data.append(sheet.cell(row,cloumn).value)
    #print(cloumn_data)
  #使用zip函数把header与一行一行数据进行 分组并返回 tuple对象,然后使用dict转化为字典
  dict_data=dict(zip(header,cloumn_data))
  row_data.append(dict_data)
print(row_data)

运行结果:

Python unittest单元测试openpyxl实现过程解析

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 过滤字符串的技巧,map与itertools.imap
Sep 06 Python
python学习手册中的python多态示例代码
Jan 21 Python
Python基于正则表达式实现文件内容替换的方法
Aug 30 Python
Python学习笔记之if语句的使用示例
Oct 23 Python
PyCharm代码格式调整方法
May 23 Python
python调用百度REST API实现语音识别
Aug 30 Python
Python根据文件名批量转移图片的方法
Oct 21 Python
在pycharm中配置Anaconda以及pip源配置详解
Sep 09 Python
使用python动态生成波形曲线的实现
Dec 04 Python
Python创建空列表的字典2种方法详解
Feb 13 Python
Python打印不合法的文件名
Jul 31 Python
python字典通过值反查键的实现(简洁写法)
Sep 30 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
May 27 #Python
python如何求100以内的素数
May 27 #Python
pytorch查看通道数 维数 尺寸大小方式
May 26 #Python
Pytorch 使用 nii数据做输入数据的操作
May 26 #Python
python变量的作用域是什么
May 26 #Python
Python3 pywin32模块安装的详细步骤
May 26 #Python
什么是python的列表推导式
May 26 #Python
You might like
php输出表格的实现代码(修正版)
2010/12/29 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
2014/11/04 PHP
PHP实现的DES加密解密实例代码
2016/04/06 PHP
Laravel中GraphQL接口请求频率实战记录
2020/09/01 PHP
使用SyntaxHighlighter实现HTML高亮显示代码的方法
2010/02/04 Javascript
JavaScript之引用类型介绍
2012/08/10 Javascript
jquery可见性过滤选择器使用示例
2013/06/24 Javascript
关于js数组去重的问题小结
2014/01/24 Javascript
javascript 事件处理示例分享
2014/12/31 Javascript
简单介绍JavaScript的变量和数据类型
2015/06/03 Javascript
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
2015/06/19 Javascript
全面解析Bootstrap手风琴效果
2020/04/17 Javascript
Vue系列:通过vue-router如何传递参数示例
2017/01/16 Javascript
JS中如何实现Laravel的route函数详解
2017/02/12 Javascript
Angular中的$watch方法详解
2017/09/18 Javascript
Vuejs 2.0 子组件访问/调用父组件的方法(示例代码)
2018/02/08 Javascript
js实现通过开始结束控制的计时器
2019/02/25 Javascript
详解JavaScript 的变量
2019/03/08 Javascript
小程序多图列表实现性能优化的方法步骤
2019/05/28 Javascript
ES6中字符串的使用方法扩展
2019/06/04 Javascript
Node.js文本文件BOM头的去除方法
2020/11/22 Javascript
django 连接数据库 sqlite的例子
2019/08/14 Python
浅谈Django2.0 加xadmin踩的坑
2019/11/15 Python
基于python实现文件加密功能
2020/01/06 Python
用python绘制樱花树
2020/10/09 Python
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
基于HTML5+CSS3实现简单的时钟效果
2017/09/11 HTML / CSS
Coach澳大利亚官方网站:美国著名时尚奢侈品牌
2017/05/24 全球购物
中软国际Java程序员笔试题
2014/07/19 面试题
高校辅导员推荐信范文
2013/12/25 职场文书
学校运动会霸气口号
2014/06/07 职场文书
餐饮周年庆活动方案
2014/08/14 职场文书
幼儿园迎国庆65周年活动策划方案
2014/09/16 职场文书
计划生育证明格式及范本
2014/10/09 职场文书
幼儿园辞职信范文
2015/02/27 职场文书
Docker下安装Oracle19c
2022/04/13 Servers