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 相关文章推荐
py2exe 编译ico图标的代码
Mar 08 Python
python使用urllib模块开发的多线程豆瓣小站mp3下载器
Jan 16 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
Dec 11 Python
Java编程迭代地删除文件夹及其下的所有文件实例
Feb 10 Python
Python3数字求和的实例
Feb 19 Python
python Tkinter的图片刷新实例
Jun 14 Python
详解Python用三种方式统计词频的方法
Jul 29 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
Sep 26 Python
python实现两个一维列表合并成一个二维列表
Dec 02 Python
Python3 搭建Qt5 环境的方法示例
Jul 16 Python
Python3压缩和解压缩实现代码
Mar 01 Python
Python 中的单分派泛函数你真的了解吗
Jun 22 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
基于initPHP的框架介绍
2013/04/18 PHP
PHP获取栏目的所有子级和孙级栏目的ID号示例
2014/04/01 PHP
php基于CodeIgniter实现图片上传、剪切功能
2016/05/14 PHP
javascript demo 基本技巧
2009/12/18 Javascript
JavaScript CSS修改学习第六章 拖拽
2010/02/19 Javascript
js+html5获取用户地理位置信息并在Google地图上显示的方法
2015/06/05 Javascript
Bootstrap优化站点资源、响应式图片、传送带使用详解3
2016/10/14 Javascript
简单实现jQuery上传图片显示预览功能
2020/06/29 jQuery
Vue2.0基于vue-cli+webpack父子组件通信(实例讲解)
2017/09/14 Javascript
Vue+Koa2+mongoose写一个像素绘板的实现方法
2019/09/10 Javascript
[46:27]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第一局
2016/03/02 DOTA
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS TNC
2018/03/30 DOTA
Python 第一步 hello world
2009/09/25 Python
python中查找excel某一列的重复数据 剔除之后打印
2013/02/10 Python
python 字典(dict)遍历的四种方法性能测试报告
2014/06/25 Python
Python定时器实例代码
2017/11/01 Python
Python读取本地文件并解析网页元素的方法
2018/05/21 Python
基于DATAFRAME中元素的读取与修改方法
2018/06/08 Python
python实现键盘控制鼠标移动
2020/11/27 Python
Python英文文本分词(无空格)模块wordninja的使用实例
2019/02/20 Python
详解如何从TensorFlow的mnist数据集导出手写体数字图片
2019/08/05 Python
Python csv模块使用方法代码实例
2019/08/29 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
2020/01/25 Python
家庭户外服装:Hawkshead
2017/11/02 全球购物
Coltorti Boutique官网:来自意大利的设计师品牌买手店
2018/11/09 全球购物
美国在线鞋类零售商:LifeStride
2019/06/09 全球购物
家乐福台湾线上购物网:Carrefour台湾
2020/09/15 全球购物
一个C/C++编程面试题
2013/11/10 面试题
高中生活自我鉴定
2014/01/18 职场文书
孝敬父母的活动方案
2014/08/28 职场文书
党员干部观看《周恩来四个昼夜》思想汇报
2014/09/10 职场文书
民主生活会对照检查材料思想汇报
2014/09/27 职场文书
学校群众路线专项整治方案
2014/10/31 职场文书
python函数指定默认值的实例讲解
2021/03/29 Python
Redis 哨兵机制及配置实现
2022/03/25 Redis
Elasticsearch 聚合查询和排序
2022/04/19 Python