ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python中操作excel文件及执行结果回写

2020-05-19 21:56:33  阅读:282  来源: 互联网

标签:case 回写 python self excel 用例 cases data


读写excel表格和结果回写

一、需求

  • 1.将用例代码和用例数据进行分离
  • 2.用例中的参数,和预期结果参数化处理
  • 3.用例数据放到excel中存储
  • 4.用例执行的结果回写到excel中

二、实现流程

  • 1.设计测试用例,excel中编写用例数据

  • 2.定义测试用例类,编写测试用例方法

    • 定义一个继承于unittest的测试用例类

    • 定义一个测试用例方法(test开头)

    • 重写____init___方法,实现(用例参数和预期结果)参数化

    • 对断言进行异常捕获,出现断言异常回写结果测试用例执行未通过,没有出现异常,回写结果用例执行通过

      import unittest
      
      # 导入登录功能函数
      from login import login_check
      from readexcel import ReadExcel
      from register import register
      excel = ReadExcel("cases.xlsx", "login")
      # 定义登录的测试用例类
      class LoginTestCase(unittest.TestCase):
      
          def __init__(self, methodName, data, expected, case_id):
              super().__init__(methodName)
              self.data = data
              self.expected = expected
              self.case_id = case_id
      
          def test_login(self):
              # 第一步:准备用例数据
              # 1、用例的参数:
              data = self.data
              # 2、预期结果:
              expected = self.expected
      
              # 第二步:执行功能函数,获取实际结果
              result = login_check(*data)
      
              # 第三步:比对实际结果和预期结果
              try:
                  self.assertEqual(expected, result)
              except AssertionError as e:
                  # 用例执行未通过
                  excel.write_data(row=self.case_id + 1, column=5, value="未通过")
                  raise e
              else:
                  excel.write_data(row=self.case_id + 1, column=5, value="通过")
      
  • 3.创建测试套件

    suite=unittest.TestSuite()
    
  • 4.将用例添加到套件

    • 读取excel中的用例数据

    • 遍历用例数据,创建用例对象

    • 将用例对象加入套件

      excel = ReadExcel("cases.xlsx", "login")
      cases = excel.read_data()
      for item in cases:
          # 通过创建对象去获取测试用例
          case = LoginTestCase("test_login", eval(item["data"]), eval(item["expected"]))
          suite.addTest(case)
      
      
  • 5.使用HTMLTestRunnerNew创建测试运行程序

    runner = HTMLTestRunner(stream=open("report.html", "wb"),  # 打开的报告,将句柄传给stream
                            tester="小眼睛",
                            description="报告的描述信息",
                            title="报告的标题")
    
  • 6.运行测试套件中的所有的用例,生产测试报告

    runner.run(suite)
    

三、封装读取和写入excel的方法

import openpyxl

# 用来保存用例数据
class CaseData:
    pass

class ReadExcel(object):

    def __init__(self, filename, sheet_name):
        self.filename = filename
        self.sheet_name = sheet_name

    def open(self):
        """打开工作薄,选择表单"""
        self.workbook = openpyxl.load_workbook(self.filename)
        self.sheet = self.workbook[self.sheet_name]

    def close(self):
        """关闭工作薄对象,释放内存"""
        self.workbook.close()

    def read_data(self):
        self.open()
        # 按行获取所有的格子
        rows = list(self.sheet.rows)
        # 获取表头行数据
        title = []
        for r in rows[0]:
            title.append(r.value)

        # 创建一个空列表 用来存放所有的用例数据
        cases = []
        # 遍历除了表头剩余的行
        for row in rows[1:]:
            # 创建一个空列表,用来存储该行的数据
            data = []
            # 再次遍历该行的每一个格子
            for r in row:
                # 将格子中的数据,添加到data中
                data.append(r.value)
            case = dict(zip(title, data))
            cases.append(case)
        # 关闭工作薄
        self.close()
        return cases

    def read_data_obj(self):
        self.open()
        # 按行获取所有的格子
        rows = list(self.sheet.rows)
        # 获取表头行数据
        title = []
        for r in rows[0]:
            title.append(r.value)

        # 创建一个空列表 用来存放所有的用例数据
        cases = []
        # 遍历除了表头剩余的行
        for row in rows[1:]:
            # 创建一个空列表,用来存储该行的数据
            data = []
            # 再次遍历该行的每一个格子
            for r in row:
                # 将格子中的数据,添加到data中
                data.append(r.value)
            # 将表头和数据打包转换为列表
            case = list(zip(title, data))
            # 创建一个对象用来保存该行用例数据
            case_obj = CaseData()
            # 遍历列表中该行用例数据,使用setattr设置为对象的属性和属性值
            for k, v in case:
                setattr(case_obj, k, v)
            # print(case_obj,case_obj.__dict__)
            # 将对象添加到cases这个列表中
            cases.append(case_obj)
        # 关闭工作薄
        self.close()
        # 返回cases(包含所有用例数据对象的列表)
        return cases

    def write_data(self, row, column, value):
        # 打开工作薄
        self.open()
        # 写入数据
        self.sheet.cell(row=row,column=column,value=value)
        # 保存文件
        self.workbook.save(self.filename)
        # 关闭工作薄
        self.close()

四、运行程序

import unittest

from HTMLTestRunnerNew import HTMLTestRunner
from readexcel import ReadExcel
from testcases import LoginTestCase, RegisterTestCase

# 第一步,创建一个测试套件
suite = unittest.TestSuite()

# 第二步:将测试用例,加载到测试套件中

# 1、读取登录功能函数的用例数据,创建用例对象,添加到套件
excel = ReadExcel("cases.xlsx", "login")
cases = excel.read_data()
for item in cases:
    # 创建一个用例对象
    case = LoginTestCase("test_login", eval(item['data']), eval(item["expected"]), item["case_id"])
    suite.addTest(case)

# 2、读取注册功能函数的用例数据,创建用例对象,添加到套件
excel = ReadExcel("cases.xlsx", "register")
cases = excel.read_data()
for item in cases:
    case = RegisterTestCase("test_register", eval(item["data"]), eval(item["expected"]), item["case_id"])
    suite.addTest(case)

# 第三步:创建一个测试运行程序启动器
runner = HTMLTestRunner(stream=open("report.html", "wb"),  # 打开一个html格式报告文件,将句柄传给stream
                        tester="musen",  # 报告中示的测试人员
                        description="python24第二次作业报告",  # 报告中显示描述信息
                        title="24期上课的测试报告")  # 报告中的标题

# 第四步:使用启动器去执行测试套件
runner.run(suite)

标签:case,回写,python,self,excel,用例,cases,data
来源: https://www.cnblogs.com/blackzhou/p/12919764.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有