python+unittest参数化+HTMLTestRunner+ssl验证做接口测试

本文介绍了使用Python的requests模块进行接口测试,unittest框架结合参数化进行自动化测试,以及HTMLTestRunner生成HTML测试报告的流程。同时讲解了ssl验证在接口测试中的应用,包括忽略校验和证书校验的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0 引言

最近接触了API接口测试项目,一开始使用Postman测试,感觉还挺好用,但是时间一长,突然发现每次操作起来挺麻烦,特别是修改配置文件。于是乎打算写成自动化测试脚本,尝试了很多方法之后,最终选定python语言、unittest框架及其参数化、HTMLTestRunner测试报告框架、以及ssl验证过程(针对https验证),下面详细地介绍下整个学习过程及对应的代码实现。

1 requests模块

python中对于请求http协议,有很多模块,比如urllib、requests等模块,如果你只是用来请求http协议,测试一下接口的返回及内容的话,推荐使用requests模块。为什么这么说呢?因为简洁就是美,requests有一个返回状态码status_code,来验证请求是否成功,而且返回的内容可以用text,content或者json()格式表示,非常方便。下面简单介绍一下requests模块。直接上代码:

import requests

def Get(url, para, headers):
	try:
	    req = requests.get(url=url, params=para, headers=headers)
	    return req
	except requests.RequestException as e:
	    print(e)

if __name__=='__main__':
	url = "http://www.baidu.com"
	params = None
	headers = None
	req = Get(url, params, headers)
	print(req.status_code)
	print(req.text)

输出为:

200
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta...(省略)

这表明我们的请求成功了,状态码为200,内容为网页格式。这里我只是对requests.get()方法做了一个封装,当然你也可以不用这个封装,直接用下面这个代码进行测试。

import requests
if __name__=='__main__':
	url = "http://www.baidu.com"
	params = None
	headers = None
	req = requests.get(url, params, headers)
	print(req.status_code)
	print(req.text)

输出结果也是一样的。至于其他的方法如post,put,delete等也基本类似,这里不做过多说明。提醒大家注意,在实际的api接口测试中,像headers,data等值一定要根据实际的请求参数来,不可多加,但是也不能少加,很多时候请求结果不正确或者请求失败,就是由于请求体不全或者超过了规定的参数导致的;另外一点,大家要注意,如果你的headers中的请求方法是json格式,如application/json的,那么你的headers、data等参数的数据构成中,如果使用字典封装,一定要记得两边都用双引号括起来,否则无法识别,最一劳永逸的方法就是,养成用双引号封装字典的习惯。requests模块就先介绍到这里。更多详细的requests模块介绍,请参考官方文档Request2.18.1

2 unittest框架及参数化

unittest框架是python中做单元测试的框架,它的语法也非常简单,只要你是以test方法开头的函数,并且在运行的时候选择unittest运行,那么它就将运行结果详细的在运行框中描述出来。我们还是举一个例子吧:

import unittest

class APITest(unittest.TestCase):
    
    def setUp(self):
        pass
    
    def tearDown(self):
        pass
    
    def sub(self,a,b):
        c = a + b
        return c
    
    def test_sub(self):
        d = self.sub(4,5)
        self.assertEqual(d, 9)
        
if __name__=='__main__':
    unittest.main()

简单解释下这段代码,首先我们创建一个类APITest,这个类继承自unittest.TestCase类,也就是unittest框架中的测试集类。然后我们在这个类中创建了一个sub方法,它有两个参数a,b,返回值是a和b的和。接着我们在test_sub中,测试我们刚才的sub方法,设定a=4,b=5,然后断言sub方法的返回值是否与给定的9相等,这里assertEqual(m, n)是unittest中断言两个值相等的方法,上述这段代码的运行结果如下:

Ran 1 test in 0.000s
OK

以上就是最传统的unittest框架的应用,但是这个框架有一个缺陷,就是不能自己传入参数,如果针对一个接口,我们设计了很多测试用例,实际上就是改变了一下参数组合,那么就需要写很多这样的用例。这样做很

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值