今天,给大家讲的是通过一张表格,进而处理,来测试一个简单的功能函数的代码逻辑是否有问题。今天讲的东西有很多是可以套用的,几乎就是模板
首先我先给出要测的功能函数--登录的代码
def login_check(username=None, password=None): """ 登录校验的函数 :param username: 账号 :param password: 密码 :return: dict type """ if username != None and password != None: if username == 'python31' and password == 'lemonban': return {"code": 0, "msg": "登录成功"} else: return {"code": 1, "msg": "账号或密码不正确"} else: return {"code": 1, "msg": "所有的参数不能为空"}
这是开发人员写的,我们作为测试人员,要去对它进行白盒测试,检测代码的逻辑问题,有没有出错?但是,我们现在可以用简单的方法,表格来处理,在表格上写测试用例和传入数据,给出表格如下图:
以上两者,是我们的前提准备条件,有了这两者,我们才开始写代码, 那么,如何来进行呢?
一、把excel封装好的模板直接拿过来用
import openpyxl class Excel: def __init__(self, filename, sheet_name): self.filename = filename self.sheet_name = sheet_name def open(self): # 第一步:将excel文件加载到一个工作簿对象中 self.wb = openpyxl.load_workbook(self.filename) # 第二步:选择文件中的表单 self.sh = self.wb[self.sheet_name] def read_data(self): """读数据""" self.open() res = list(self.sh.rows) # 获取第一行的单元格,用列表推导式来简写代码 title = [c.value for c in res[0]] cases_data = [] # 遍历除第一行之外所有的行 for row in res[1:]: data = [c.value for c in row] case = dict(zip(title, data)) cases_data.append(case) return cases_data def write_data(self, row, column, value): """写数据""" self.open() self.sh.cell(row=row, column=column, value=value) self.wb.save(self.filename)
二、编写测试用例类
1、定义测试类,再定义一个测试方法
2、去excel中读取用例数据
3、通过ddt实现数据驱动
4、实现用例内部的逻辑
import unittest from day_15.demo_处理表格示例 import myddt from day_15.demo_处理表格示例.hand_excel import Excel from day_15.demo_处理表格示例.login import login_check @myddt.ddt class TestLogin(unittest.TestCase): excel = Excel(r"C:UsersAdministratorPycharmProjectsexampleday_15demo_处理表格示例cases.xlsx", "login") cases_data = excel.read_data() @myddt.data(*cases_data) def test_login(self, item): # 准备数据 data = eval(item["data"]) expected = eval(item["expected"]) # 调用被测的功能函数 res = login_check(**data) # 获取用例所在表单的行号 case_row = item["case_id"] + 1 try: # 断言 self.assertEqual(expected, res) except AssertionError as e: self.excel.write_data(row=case_row, column=5, value="失败") print("{}:用例执行失败,失败的信息如下:".format(item['title'])) print(e) raise e else: self.excel.write_data(row=case_row, column=5, value="通过") print("{}:用例测试执行通过!!!".format(item['title'])) if __name__ == '__main__': unittest.main()
记得要引入ddt,修改ddt里面的源码
三、跑程序run
import unittest from unittestreport import TestRunner suite = unittest.defaultTestLoader.discover(r"C:UsersAdministratorPycharmProjectsexampleday_15demo_处理表格示例 estcase") runner = TestRunner(suite, filename="report.html", report_dir=".", title='测试报告', tester='excellent', desc="excellent执行测试生成的报告", templates=1 # 这里可以生成两个风格不同的报告,待会给大家看一下 ) runner.run()
最后把运行的结果给大家看一下:
所以,其实就是这么几个步骤
1.准备要测的函数和表格用例
2.编写测试用例类,导入excel封装和ddt
3.run跑程序