一天一个关于测试知识点,5分钟内讲解你最关心的软件测试问题,今天就接着来谈谈关于软件测试中的“接口测试的初始阶段”。
接口测试,又名API测试,在DevOps推广之中的地位得到了显著的提高,对于接口测试相对于GUI自动化测试、基于单元测试的自动化测试脱颖而出,以前测试金字塔模型(图1-1)逐渐被纺锤模型(图1-2)所取代。
当然JMeter、Postman、HttpRunner也可以进行接口测试(后面的章节会进行介绍),但是它由于代码不可复用,越来越被类似于基于requests类Python代码取代了。基于requests类Python代码使接口测试变得非常简单,只要组合get或者post参数,通过requests类的post或者get方法调用返回数据就可以实现,下面的代码展示了一个网站的登录功能的最原始接口测试代码。
案例4-89:最基本的测试登录功能的接口测试。
#最基本的操作
import requests
import unittest
class login(unittest.TestCase):
def setUp(self):
self.correctusername="cindy"
self.correctpassword="123456"
self.discorrectusername="jerry"
self.discorrectpassword="000000"
self.url="http://localhost:8000/login_action/"
#正确的用户名,错误的密码
def test_correctusername_discorrectpassword(self):
payload={"username":self.correctusername,"password":self.discorrectpassword}
data = requests.post(self.url,data=payload)
#验证返回码
self.assertEqual("200",str(data.status_code))
#验证返回内容
self.assertIn("用户名或者密码错误" ,str(data.text))
#错误的用户名,正确的密码
def test_discorrectusername_correctpasswor(self):
payload={"username":self.discorrectusername,"password":self.correctpassword}
data = requests.post(self.url,data=payload)
#验证返回码
self.assertEqual("200",str(data.status_code))
#验证返回内容
self.assertIn("用户名或者密码错误" ,str(data.text))
#错误的用户名,错误的密码
def test_discorrectusername_discorrectpassword(self):
payload={"username":self.discorrectusername,"password":self.discorrectpassword}
data = requests.post(self.url,data=payload)
#验证返回码
self.assertEqual("200",str(data.status_code))
#验证返回内容
self.assertIn("用户名或者密码错误" ,str(data.text))
#正确的用户名,正确的密码
def test_correctusername_correctpassword(self):
payload={"username":self.correctusername,"password":self.correctpassword}
data = requests.post(self.url,data=payload)
#验证返回码
self.assertEqual("200",str(data.status_code))
#验证返回内容
self.assertIn("电子商务系统" ,str(data.text))
if __name__=='__main__':
#构造测试集
suite=unittest.TestSuite()
suite.addTest(login("test_correctusername_discorrectpassword"))
suite.addTest(login("test_discorrectusername_correctpassword"))
suite.addTest(login("test_discorrectusername_discorrectpassword"))
suite.addTest(login("test_correctusername_correctpassword"))
#运行测试集合
runner=unittest.TextTestRunner()
runner.run(suite)
在这里仍旧使用python的unittest框架,分别验证了错误用户名,正确密码、正确用户名,错误密码、错误用户名,错误密码、正确用户名,正确密码四种情况。
1. requests类配置与发送相关的知识简介
l 安装包:
C:\>pip3 install requests
l 引入包:
import requests
l 发送get参数格式:
data = requests.get(url,params=payload)
其中payload为字典类型的变量。
l 发送post参数格式:
data = requests.post(url,data=payload)
其中payload为字典类型的变量。
l 发送cookie请求格式:
data = requests.post(url,data=payload,cookies=cookie)
或者
requests.get(url,params=payload,cookies=cookie)
其中cookie也是为字典类型的变量。
l 保持session:
mysession = requests.Session()
data = mysession.get(url,params=payload)
或者
data = mysession.post(url,data=payload)
这种情况往往发生在测试先要登录的测试功能场景中。
2. requests类响应相关的知识简介
l data.status_code:响应状态码。
l data.content:字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩。
l data.headers:以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None。
l data.json():Requests中内置的JSON解码器。
l data.url:获取url。
l data.encoding:编码格式。
l data.cookies:获取cookie。
l data.raw :返回原始响应体。
l data.text:字符串方式的响应体,会自动根据响应头部的字符编码进行解码。
l data.raise_for_status():失败请求(非200响应)抛出异常