程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

Python+Excel+Unittest+HTMLTestRunner实现数据驱动接口自动化测试(一)

发布于2019-08-08 16:49     阅读(199)     评论(0)     点赞(4)     收藏(0)


整个流程:

使用HTMLTestRunner的Run方法执行用例,用例调用Excel读取方法,将测试数据导入到unittest用例中执行,测试结果返回给HTMLTestRunner。

因为刚接触接口自动化,写的比较简单。后面也会考虑加一个请求类型的封装,excel测试数据也会增加一些字段(如用例是否运行,是否带Headers、cookie,

case依赖,关联数据库,增加日志,定制化HTML,测试结果自动发送邮件等),搞完后再分享出来。

 

整个目录结构:

 

---common 存放公共库

---testcase 

---testdata 存放excel测试数据

---testreport 存放测试报告

---Run_tests 启动测试

 

1. Run_tests.py

使用discover方法构造测试集,用HTMLTestRunner的run()方法启动测试集并生成测试报告。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import time, sys
sys.path.append('./testcase')
sys.path.append('./common')
from HTMLTestRunner import HTMLTestRunner
from unittest import defaultTestLoader
 
 
 
# 指定测试用例为当前文件夹下的 testcase 目录
test_dir = './testcase'
testsuit = defaultTestLoader.discover(test_dir, pattern='*_test.py')
 
 
if __name__ == "__main__":
 
    now = time.strftime("%Y-%m-%d %H_%M_%S")
    filename = './testreport/' + now + '_result.html'
    fp = open(filename, 'wb')
    runner = HTMLTestRunner(stream=fp,
                            title='System Interface Auto Test Report',
                            description='Test Result')
    runner.run(testsuit)
    fp.close()

  

2. 测试Excel档如下:

 

使用公共库中的OperateExcel方法读取,通过excel名和sheet名返回测试数据的列表集合。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def Readexcelrow_of_sheet(filename,sheet_name,row):
    '''返回某个sheet中某一行数据的列表'''
    folder = "C:\\Users\\LENOVO\\PycharmProjects\\Apiautotest-master\\testdata\\"
    fullfilename = folder + filename
    rb = xlrd.open_workbook(fullfilename)
    sheet = rb.sheet_by_name(sheet_name)
    datalist = []
    for i in range(8):
        try:
            data = sheet.cell_value(row,i)
            datalist.append(data)
        except TypeError as f:
            break
    #print (datalist)
    return datalist
 
def Readexcelalldata_of_sheet(filename,sheet_name):
    '''返回整个sheet的内容的列表'''
    datalistlist =[]
    for i in range(1,100):
        try:
            data = Readexcelrow_of_sheet(filename,sheet_name,i)
            datalistlist.append(data)
        except IndexError as e:
            break
    return datalistlist

  

3. testcase调用该方法读取测试数据后,取出测试数据循环进行request测试,对测试结果进行断言

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def test_login(self):
    self.testcasecount = len(self.testcaseinfo)
    for i in range(len(self.testcaseinfo)):
        data = self.testcaseinfo[i]
        #print (data)
        url =     data[3]
        payload = data[4].encode('utf-8')
        expectedcode = data[5]
        expectedmsg =  data[6]
        expecteddata = data[7]
        headers= {"Content-Type": "application/json"}
        r = requests.post(url,data=payload,headers=headers)
        self.result = r.json()
        self.assertEqual(self.result['code'], expectedcode,msg="code断言失败")
        self.assertEqual(self.result['msg'], expectedmsg,msg="msg断言失败")
        if expecteddata != "":
            print ("检查data字段")
            self.assertEqual(str(self.result['data']), expecteddata,msg="data断言失败")

 

4.测试完成后生成测试报告,报告中可以体现出测试异常的原因。

目前还有个问题:

unittest中实际运行了一个借口的很多条用例,而报告中只会有一条记录。这是因为unittest test case中我只写了一个test方法,循环测试数据。这样写用例更简单,目前在想是从报告中处理,还是测试用例读取部分进行处理。

有想法欢迎给我留言,谢谢。

 



所属网站分类: 技术文章 > 博客

作者:可以给我吃一口吗

链接:https://www.pythonheidong.com/blog/article/15366/f0b161baf4c7d67eeb4c/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

4 0
收藏该文
已收藏

评论内容:(最多支持255个字符)