Python自动化测试实战篇(2)unittest实现批量接口测试,并用HTMLTestRunner输出测试报告

有目标就不怕路远。年轻人.无论你现在身在何方.重要的是你将要向何处去。只有明确的目标才能助你成功。没有目标的航船.任何方向的风对他来说都是逆风。因此,再遥远的旅程,只要有目标.就不怕路远。没有目标,哪来的劲头?一车尔尼雷夫斯基

导读:本篇文章讲解 Python自动化测试实战篇(2)unittest实现批量接口测试,并用HTMLTestRunner输出测试报告,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

在这里插入图片描述
代码已上传Python接口项目实战篇(2)源码

项目场景:

由于关于接口的测试用例任务越来越多,单纯靠人工手敲的方式输入和校验,速度上已经不能够满足项目的进行速度,而且都是针对登录的框框进行用例测试,如果后期测试用例高达数千条的话怎么办,有没有一种能够自动化解决的方案?

在这里插入图片描述

项目方案:

最终决定尝试使用unittest自动化框架+requests尝试解决这些接口方面的问题,并用HTMLTestRunner输出测试报告,于是就有了本篇的文章名字Python接口项目实战篇(2)unittest实现自动化网页登录接口测试,并用HTMLTestRunner输出测试报告
最终我需要实现的效果如下图所示

在这里插入图片描述

1.首先第一步导入包

这里要注意的是HTMLTestRunner直接安装pycharm是无法使用,有个方法说是放在python中的lib文件夹中,但是我尝试过后没有用所以只能用HTMLTestRunner3_New.py调用里面的类方法才能使用,这个我可以直接下载项目源代码里面有这个
代码已上传

import configparser
import os,time
import unittest,requests
from HTMLTestRunner3_New import HTMLTestRunner

2.执行本地文件地址拼接

当然直接使用绝对路径也是没问题,我这边需要使用一个自动生成名字而且

class Get_config_ini:
    def __init__(self,file):
        self.cf = configparser.ConfigParser()
        self.cf.read(file)
    def get_ini_test(self,a,c):
        values = self.cf.get(a,c)
        return values
a1_path = os.path.abspath(os.path.dirname(__file__))
a1 = Get_config_ini(os.path.join(a1_path,'Config.ini')).get_ini_test('a_path','ar_path')#获取本地的ini文件内的路径
a2_path = os.path.join(a1_path)

t_ime = time.strftime('%Y-%m-%H-%M-%S')#生成文件所需的时间
report_path = os.path.join(a2_path,t_ime+'report.html')#拼接文件名,这时文件还没有生成只是个名字

3.写unittest中测试用例执行框架

class login_test(unittest.TestCase):#定义一个类继承单元框架
    @classmethod
    def setUpClass(cls) -> None:
        print('用例测试开始')
    @classmethod
    def tearDownClass(cls) -> None:
        print('用例测试结束')
    def setUp(self) ->None:
        print('方法的开始')
    def tearDown(self) -> None:
        print('方法的结束')
    def test_1(self):
        print('测试用例1')
    def test_2(self):
        print('测试用例2')
    def test_3(self):
        print('测试用例3')
    def test_4(self):
        print('测试用例4')
    def test_5(self):
        print('测试用例5')
    def test_6(self):
        print('测试用例6')
    def test_7(self):
        print('测试用例7')
    def test_8(self):
        print('测试用例8')
    def test_9(self):
        print('测试用例9')
    def test_10(self):
        print('测试用例10')
class login_test(unittest.TestCase):#定义一个测试框架的类
    def test_1(self):
        url = 'http://192.168.52.129:8080/cms/manage/loginJump.do'
        headers = {'Content-Type': 'application/x-www-form-urlencoded'}
        data = {'userAccount':'admin','loginPwd':123456}
        reps = requests.post(url=url,headers=headers,data=data)
        print(reps.text)
    def test_2(self):
        url = 'http://192.168.52.129:8080/cms/manage/loginJump.do'
        headers = {'Content-Type': 'application/x-www-form-urlencoded'}
        data = {'userAccount': 'admin', 'loginPwd': '123Aa'}
        reps = requests.post(url=url, headers=headers, data=data)
        print(reps.text)
    def test_3(self):
        url = 'http://192.168.52.129:8080/cms/manage/loginJump.do'
        headers = {'Content-Type': 'application/x-www-form-urlencoded'}
        data = {'userAccount': 'admin', 'loginPwd': '123456@@'}
        reps = requests.post(url=url, headers=headers, data=data)
        print(reps.text)
    def test_4(self):
        url = 'http://192.168.52.129:8080/cms/manage/loginJump.do'
        headers = {'Content-Type': 'application/x-www-form-urlencoded'}
        data = {'userAccount': 'admin', 'loginPwd': ' '}
        reps = requests.post(url=url, headers=headers, data=data)
        print(reps.text)
    def test_5(self):
        url = 'http://192.168.52.129:8080/cms/manage/loginJump.do'
        headers = {'Content-Type': 'application/x-www-form-urlencoded'}
        data = {'userAccount': 'admin', 'loginPwd': '/.;'}
        reps = requests.post(url=url, headers=headers, data=data)
        print(reps.text)
    def test_6(self):
        url = 'http://192.168.52.129:8080/cms/manage/loginJump.do'
        headers = {'Content-Type': 'application/x-www-form-urlencoded'}
        data = {'userAccount': 'admin', 'loginPwd': '一二三四五六'}
        reps = requests.post(url=url, headers=headers, data=data)
        print(reps.text)
    def test_7(self):
        url = 'http://192.168.52.129:8080/cms/manage/loginJump.do'
        headers = {'Content-Type': 'application/x-www-form-urlencoded'}
        data = {'userAccount': 'admin', 'loginPwd': 'abcdefg'}
        reps = requests.post(url=url, headers=headers, data=data)
        print(reps.text)
    def test_8(self):
        url = 'http://192.168.52.129:8080/cms/manage/loginJump.do'
        headers = {'Content-Type': 'application/x-www-form-urlencoded'}
        data = {'userAccount': 'admin', 'loginPwd': 'いち'}
        reps = requests.post(url=url, headers=headers, data=data)
        print(reps.text)
    def test_9(self):
        url = 'http://192.168.52.129:8080/cms/manage/loginJump.do'
        headers = {'Content-Type': 'application/x-www-form-urlencoded'}
        data = {'userAccount': 'admin', 'loginPwd': '하나 둘 셋 넷 다섯 여섯'}
        reps = requests.post(url=url, headers=headers, data=data)
        print(reps.text)
    def test_10(self):
        url = 'http://192.168.52.129:8080/cms/manage/loginJump.do'
        headers = {'Content-Type': 'application/x-www-form-urlencoded'}
        data = {'userAccount': 'admin', 'loginPwd': 'адзін два тры чатыры пяць шэсць'}
        reps = requests.post(url=url, headers=headers, data=data)
        print(reps.text)

将测试用例添加进测试用例添加进容器对象中

def test():
    suit = unittest.TestSuite()#容器
    suit.addTests([login_test('test_1'), login_test('test_2'), login_test('test_3'),#容器对象
                   login_test('test_4'), login_test('test_5'), login_test('test_6'),
                   login_test('test_7'), login_test('test_8'), login_test('test_9'),
                   login_test('test_10')])
    p = open(report_path, 'wb')
    run = HTMLTestRunner(stream=p, title='登录接口报告', description='执行概况如下', tester='for_you')
    run.run(suit)

4.创建程序入口

if __name__ == '__main__':
	 test()

执行一下看下效果,unittest框架根据我们写的测试用例自动进行测试在这里插入图片描述
测试完毕输出测试报告,内容也很详细,如果有调用测试登录接口失败的情况也会写出来,目前暂时没有无法调用的接口,通过数也是全部都通过。
在这里插入图片描述

5.当然我们也可以使用unittest统计项目中有多少个被执行过得测试用例总计

在这里插入图片描述

6.统计项目中有多少个被执行过得测试用例

只要给出对应项目地址和目前当前py文件的地址就会对这些曾经被执行过得测试用例进行统计

def logjum():
    discre = unittest.defaultTestLoader.discover(start_dir=a1_path,pattern='g.py')
    p = open(report_path,'wb')#打开被执行过的文件
    run = HTMLTestRunner(stream=p,title='CMS总计报告',description='执行情况',tester='for_you')
    run.run(discre)

7.将unittest中的统计测试用例功能添加进去

if __name__ == '__main__':
    if os.access(report_path,os.F_OK) ==True:
        print('文件已存在,执行统计操作')
        logjum()
    else:
        print('文件不存在执行生成操作')
        test()
        if os.access(report_path, os.F_OK) == True:
            print('文件已存在,执行统计操作')
            test()

这里要注意一下unittest的总计是对目前当前已执行过的测试用例数进行统计,没有执行过的测试用例是无法被统计

而且这里需要确定被统计的文件是否存在,因为需要进行读取当前被统计的文件,然后才能进行写入操作然后进行统计。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/134075.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!