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

一。初识单元测试

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标准按顺序进行执行

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

1。用例执行

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

2.用例组织

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

如下:

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收集的内容是一个列表,如下图):

[<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)

运行结果:

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

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

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

运行结果:

2.HTMLTestRunner(测试报告模板)

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

运行结果:[/code]

三。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表信息:

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

注意:

#获取表单的最大行数
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)
#运行结果:

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)

运行结果:

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

(0)

相关推荐

  • Python unittest单元测试框架实现参数化

    当我们在使用TestNG时,发现它有一个非常好用的参数化功能.当你的测试用例有固定的参数和断言结果时,它可以相似用例的节省用例的个数. 例子如下: import static org.testng.Assert.assertEquals; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; /** * Created by fnngj on 2017/3/19. */ public cla

  • Python单元测试框架unittest使用方法讲解

    概述 1.测试脚手架(test fixture) 测试准备前要做的工作和测试执行完后要做的工作.包括setUp()和tearDown(). 2.测试案例(test case) 最小的测试单元. 3.测试套件(test suite) 测试案例的集合. 4.测试运行器(test runner) 测试执行的组件. 命令行接口 可以用命令行运行测试模块,测试类以及测试方法. 复制代码 代码如下: python -m unittest test_module1 test_module2 python -m

  • Python unittest单元测试框架总结

    什么是单元测试 单元测试是用来对一个模块.一个函数或者一个类来进行正确性检验的测试工作. 比如对于函数abs(),我们可以编写的测试用例为: (1)输入正数,比如1.1.2.0.99,期待返回值与输入相同 (2)输入复数,比如-1.-1.2.-0.99,期待返回值与输入相反 (3)输入0,期待返回0 (4)输入非数值类型,比如None.[].{}.期待抛出TypeError 把上面这些测试用例放到一个测试模块里,就是一个完整的单元测试  unittest工作原理 unittest中最核心的四部分

  • Python单元测试工具doctest和unittest使用解析

    Python标准库包含两个测试工具. doctest:一个简单的模块,为检查文档而设计,但也适合用来编写单元测试. unittest:一个通用的测试框架. 一.使用doctest进行单元测试 创建文件mymath.py,内容 def square(x): ''' 计算平方并返回结果(下面是单元测试的格式) >>> square(2) >>> square(3) ''' return x * x if __name__ == '__main__': import doct

  • Python unittest单元测试框架的使用

    一.测试模型 下面这部分来自于某书籍资料,拿过来,按需参考一下: 测试模型 (1)线性测试 1.概念: 通过录制或编写对应应用程序的操作步骤产生的线性脚本.单纯的来模拟用户完整的操作场景.(操作,重复操作,数据)都混合在一起. 2.优点:每个脚本相对独立,且不产生其他依赖和调用.任何一个测试用例脚本拿出来都可以单独执行. 3.缺点:开发成本高,用例之间存在重复的操作.比如重复的用户登录和退出. 维护成本高,由于重复的操作,当重复的操作发生改变时,则需要逐一进行脚本的修改. 4.线性测试实例:用户

  • Python Unittest自动化单元测试框架详解

    本文实例为大家分享了Python Unittest自动化单元测试框架的具体代码,供大家参考,具体内容如下 1.python 测试框架(本文只涉及 PyUnit) 参考地址 2.环境准备 首先确定已经安装有Python,之后通过安装PyUnit,Python版本比较新的已经集成有PyUnit(PyUnit 提供了一个图形测试界面UnittestGUI.py) 参考:查看地址 3.代码实例 使用的IDE为 PyCharm,DEMO结构如图 1.简单地一个实例 # Test002_Fail.py #

  • python单元测试unittest实例详解

    本文实例讲述了python单元测试unittest用法.分享给大家供大家参考.具体分析如下: 单元测试作为任何语言的开发者都应该是必要的,因为时隔数月后再回来调试自己的复杂程序时,其实也是很崩溃的事情.虽然会很快熟悉内容,但是修改和调试将是一件痛苦的事情,如果你在修改了代码后出现问题的话,而单元测试可以帮助我们很快准确的定位到问题的位置,出现问题的模块和单元.所以这是一件很愉快的事情,因为我们知道其它修改或没有修改的地方仍然是正常工作的,而我们目前的唯一问题就是搞定眼前这个有点问题的"家伙&qu

  • Python unittest单元测试框架及断言方法

    1.单元测试的几个重要概念 (1)Test Case 一个Test Case实例是一个测试用例,完整的测试流程包括测试前准备环境的搭建(setUp).实现测试过程的代码(run).以及 测试后环境的还原(tearDown). (2)Test Suite Test Suite用来组装单个测试用例,可以将多个测试用例集合再一起来执行,通过addTest加载TestCase到TestSuit实例中. (3)Test Runner 执行测试,执行结果.unittest单元测试框架中,通过TextTest

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

    一.初识单元测试 1)定义: 单元:函数或者是类 单元测试:测试类或者函数 python内置的单元测试框架:unittest 2)单元测试的意义 好处:投入小,收益大.能够精准的,更早的发现问题. 3)单元测试与测试关系 python 很难测试 java 的单元. 关键是单元测试一般是开发或者测试开发做的. 测试一般会在集成.系统.验收进行测试 4)unittest的注意事项: 1.模块名需要以 test_ 开头 2.类名:以 Test 开头 3.测试用例的方法名称以 test_ 开头 4.单元

  • Python测试线程应用程序过程解析

    这篇文章主要介绍了Python测试线程应用程序过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在本章中,我们将学习线程应用程序的测试.我们还将了解测试的重要性. 为什么要测试? 在我们深入讨论测试的重要性之前,我们需要知道测试的内容.一般来说,测试是一种了解某些东西是如何运作的技术.另一方面,特别是如果我们谈论计算机程序或软件,那么测试就是访问软件程序功能的技术. 在本节中,我们将讨论软件测试的重要性.在软件开发中,必须在向客户端发布软

  • python unittest单元测试的步骤分析

    说明 1.导入unittest模块. 2.导入被测对象. 3.创建测试类unittest.TestCase. 4.重写setUp和tearDown(如果有初始化和结束) 5.以函数的形式写测试项目:函数名以test_开头. 6.unittest运行测试用例. 实例 import unittest class LoginCheckTest(unittest.TestCase): def setUp(self) -> None: print("每条用例") def test_logi

  • python打包成so文件过程解析

    这篇文章主要介绍了python打包成so文件过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 wget https://bootstrap.pypa.io/get-pip.py python get-pip.py pip install cython 编写setput.py文件: setup.py文件内容如下: from distutils.core import setup from distutils.extension import

  • python文字转语音实现过程解析

    这篇文章主要介绍了python文字转语音实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 使用百度接口 接口地址 https://ai.baidu.com/docs#/TTS-Online-Python-SDK/top 安装接口 pip install baidu-aip from aip import AipSpeech """ 你的 APPID AK SK """ APP_ID =

  • python使用rsa非对称加密过程解析

    这篇文章主要介绍了python使用rsa非对称加密过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.安装rsa 支持python 2.7 或者 python 3.5 以上版本 使用豆瓣pypi源来安装rsa pip install -i https://pypi.douban.com/simple rsa 2.加密解密 2.1.生成公私钥对 import rsa # 1.接收者(A)生成512位公私钥对 # a. lemon_pub为

  • python全局变量引用与修改过程解析

    这篇文章主要介绍了python全局变量引用与修改过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.引用 使用到的全局变量只是作为引用,不在函数中修改它的值的话,不需要加global关键字.如: #! /usr/bin/python a = 1 b = [2, 3] def func(): if a == 1: print("a: %d" %a) for i in range(4): if i in b: print(&quo

  • Python namedtuple命名元组实现过程解析

    这篇文章主要介绍了Python namedtuple命名元组实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 命名元组(namedtuple)是一种带有属性的元组,它们是组合只读数据的很好的方式. 相比一般的元组,构造命名元组需要先导入namedtuple,因为它不在默认的命名空间里.然后通过名字和属性来定义一个命名元组.这会返回一个像类一样的对象,可以进行多次实例化. 命名元组可以被打包.解包以及做所有可以对普通元组做的事,并且还可

  • Python Decorator的设计模式演绎过程解析

    目录 关于代理模式.装饰模式 Python中的代理/装饰 还有什么不理想的地方呢? 补充 关于代理模式.装饰模式 设计模式中经常提到的代理模式.装饰模式,这两种叫法实际上是说的同一件事,只是侧重点有所不同而已. 这两者都是通过在原有对象的基础上封装一层对象,通过调用封装后的对象而不是原来的对象来实现代理/装饰的目的. 例如:(以Java为例) public class CountProxy implements Count { private CountImpl countImpl; publi

随机推荐