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迭代用法实例教程
Sep 08 Python
python获取标准北京时间的方法
Mar 24 Python
Python3编程实现获取阿里云ECS实例及监控的方法
Aug 18 Python
Python+OpenCV人脸检测原理及示例详解
Oct 19 Python
python测试mysql写入性能完整实例
Jan 18 Python
Python实现PS滤镜特效之扇形变换效果示例
Jan 26 Python
从运行效率与开发效率比较Python和C++
Dec 14 Python
python安装gdal的两种方法
Oct 29 Python
如何关掉pycharm中的python console(图解)
Oct 31 Python
python 实现按对象传值
Dec 26 Python
Python sklearn中的.fit与.predict的用法说明
Jun 28 Python
浅谈anaconda python 版本对应关系
Oct 07 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查看session内容的函数
2008/08/27 PHP
php实现插入排序
2015/03/29 PHP
PHP重定向与伪静态区别
2017/02/19 PHP
jQuery .attr()和.removeAttr()方法操作元素属性示例
2013/07/16 Javascript
jquery实现多行文字图片滚动效果示例代码
2014/10/10 Javascript
jQuery在ul中显示某个li索引号的方法
2015/03/17 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
2015/04/12 Javascript
jquery选择器中的空格与大于号&gt;、加号+与波浪号~的区别介绍
2016/06/24 Javascript
jQuery仿京东商城楼梯式导航定位菜单
2016/07/25 Javascript
loading动画特效小结
2017/01/22 Javascript
详解闭包解决jQuery中AJAX的外部变量问题
2017/02/22 Javascript
ES6新数据结构Set与WeakSet用法分析
2017/03/31 Javascript
VUE 自定义组件模板的方法详解
2019/08/30 Javascript
layui将table转化表单显示的方法(即table.render转为表单展示)
2019/09/24 Javascript
Vue+element+cookie记住密码功能的简单实现方法
2020/09/20 Javascript
[02:39]DOTA2国际邀请赛助威团西雅图第一天
2013/08/08 DOTA
Python中实现两个字典(dict)合并的方法
2014/09/23 Python
详解Python中的文件操作
2016/08/28 Python
深入解答关于Python的11道基本面试题
2017/04/01 Python
浅谈pycharm出现卡顿的解决方法
2018/12/03 Python
python 同时运行多个程序的实例
2019/01/07 Python
如何用Django处理gzip数据流
2021/01/29 Python
HTML5之SVG 2D入门8—文档结构及相关元素总结
2013/01/30 HTML / CSS
HTML5拖放效果的实现代码
2016/11/17 HTML / CSS
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
html5关于外链嵌入页面通信问题(postMessage解决跨域通信)
2020/07/20 HTML / CSS
C# .NET面试题
2015/11/28 面试题
主管职责范文
2013/11/09 职场文书
优秀村官事迹材料
2014/01/10 职场文书
中秋节活动总结
2014/08/29 职场文书
关于拾金不昧的感谢信
2015/01/21 职场文书
2015领导干部廉洁自律工作总结
2015/07/23 职场文书
甜美蛋糕店的创业计划书模板,拿来即用!
2019/08/21 职场文书
解读MySQL的客户端和服务端协议
2021/05/10 MySQL
Python自动化之批量处理工作簿和工作表
2021/06/03 Python
DE1107机评
2022/04/05 无线电