zoukankan      html  css  js  c++  java
  • 用python+openpyxl从表格中读取测试用例的多条数据,然后将执行结果写入表格中,同时生成测试报告

    
    
     1 # -*- coding: utf-8 -*-
     2 import unittest
     3 from selenium import webdriver
     4 import HTMLTestRunner
     5 from openpyxl import load_workbook
     6 class mylogintest(unittest.TestCase):#定义一个mylogintest类继承unittest.TestCase类
     7     '''打开百度测试'''
     8     def setUp(self):#用例执行前的初始化工作
     9         print("开始测试")
    10         self.driver = webdriver.Firefox()
    11 
    12     def tearDown(self):#用例执行后的初始化工作
    13         print("结束测试")
    14         self.driver.quit()
    15 
    16     def testopenBD(self):
    17         '''打开百度'''
    18         book = load_workbook("mylogintest.xlsx")  # 默认可读写,若有需要可以指定write_only和read_only为True
    19         b = book.active
    20         datadict = {} #创建一个字典变量
    21         maxC = b.max_column#获取最大列
    22         maxR = b.max_row#获取最大行
    23         for i in range(1, maxC + 1):#range默认从0开始,到后面参数的-1结束,而openpyxl都是从第一行第一列开始的,所以参数为1,maxC+1;意思就是遍历第一列到最后一列,
    24             datadict.setdefault(b.cell(1, i).value)#设置字典datadict的键值,从第一行第一列,到第一行最后一列,也就是第一行的标题设置为键值,i表示列
    25             # print(datadict)
    26         for i in range(2, maxR + 1):#除去第一行标题,从第二行遍历到最后一行
    27             for j in range(1, maxC + 1):#从第一列遍历到最后一列
    28                 datadict[b.cell(1, j).value] = b.cell(i, j).value#在字典里设置键对应的值,j表示列
    29                 # print(datadict)
    30             # if datadict["url"] & datadict["校验"] != None:
    31             self.driver.get(datadict["地址"])#从对应键里取出值地址对应的URL值,这里的键就是表格的第一行标题,所以EXCEL的标题要按照规定来写
    32             if self.driver.title == datadict["校验"]:#如果打开地址后,title值跟校验对应的值一致
    33                 b.cell(i, maxC, '通过')#就将测试通过结果写入当前行的最后一列的单元格中,
    34             else:
    35                 b.cell(i, maxC, '不通过')#就将测试不通过结果写入当前行的最后一列的单元格中,所以建立表格数据的时候,默认将结果写到最后一列即可
    36         book.save("mylogintest.xlsx")#最后记得关闭
    37 
    38 if __name__=='__main__':
    39     filename = './'+'mylogintestresult.html'#定义文件名与路径
    40     fp = open(filename,'wb')#生成文件
    41     ut = unittest.TestSuite()  # 创建测试套件;TestSuite不加括号的结果:addTest() missing 1 required positional argument: 'test'
    42     ut.addTest(mylogintest('testopenBD'))#将要执行的用例加入测试套件中
    43     runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title='分别打开百度51网站',description='百度51') #如果引用的是from HTMLTestRunner import HTMLTestRunner,这里就不需要写两个HTMLTestRunner,一个就够了
    44     runner.run(ut)#运行测试套件
    45     fp.close()

    表格内容为:黄色标记为脚本自动写入的值

    测试报告:

    其实针对一个用例多条数据的情况,用测试报告没太大用,而且我暂时也没有找到一个测试用例,多条测试数据能够生成一个多条结果的报告,这里只有一条,所以直接用表格写入写出的方法也还比较方便,

    生成的测试报告可以删除掉不用

  • 相关阅读:
    FTP-实例(Md5验证)
    Socket-实例
    函数对象、函数嵌套、名称空间与作用域、装饰器
    Docker——手动创建镜像
    Docker——桥接网络配置
    Docker——网络和存储(数据卷)
    Docker-PS命令解析
    面试题44:扑克牌的顺子
    面试题42:翻转单词顺序VS左旋转字符串
    面试题41:和为s的两个数字VS和为s的连续正数序列
  • 原文地址:https://www.cnblogs.com/lelexiong/p/8995134.html
Copyright © 2011-2022 走看看