unittest
测试框架进行接口自动化测试在接口自动化测试中,unittest
是 Python 自带的单元测试框架,它也非常适合用于编写和执行接口测试。通过集成 unittest
与 HTTP 请求库(如 requests
),我们可以轻松实现对 RESTful API 或其他接口的自动化测试。
下面将结合实际案例,介绍如何使用 unittest
来进行接口自动化测试。
接口自动化测试的目标是验证接口的正确性、可靠性和稳定性。使用 unittest
进行接口测试时,我们需要执行以下操作:
requests
等库向接口发送请求。在进行接口自动化测试时,首先需要安装 requests
库,它是一个流行的 HTTP 请求库,用于与接口进行交互。
pip install requestsphp20 Bytes© 菜鸟-创作你的创作
通过继承 unittest.TestCase
,编写测试类和测试方法,每个测试方法都使用 HTTP 请求与接口进行交互,并对接口返回结果进行断言。
import unittestimport requestsclass TestAPI(unittest.TestCase): # 设置接口的 URL 和请求头 base_url = "https://jsonplaceholder.typicode.com" headers = {"Content-Type": "application/json"} # 测试 GET 请求 def test_get_user(self): response = requests.get(f"{self.base_url}/users/1", headers=self.headers) # 验证响应状态码 self.assertEqual(response.status_code, 200) # 验证返回数据结构 data = response.json() self.assertEqual(data['id'], 1) self.assertEqual(data['name'], 'Leanne Graham') # 测试 POST 请求 def test_create_post(self): data = {"title": "foo", "body": "bar", "userId": 1} response = requests.post(f"{self.base_url}/posts", json=data, headers=self.headers) # 验证响应状态码 self.assertEqual(response.status_code, 201) # 验证返回数据 json_data = response.json() self.assertEqual(json_data['title'], "foo") self.assertEqual(json_data['body'], "bar") # 测试 PUT 请求 def test_update_post(self): data = {"id": 1, "title": "foo updated", "body": "bar updated", "userId": 1} response = requests.put(f"{self.base_url}/posts/1", json=data, headers=self.headers) # 验证响应状态码 self.assertEqual(response.status_code, 200) # 验证返回数据 json_data = response.json() self.assertEqual(json_data['title'], "foo updated") self.assertEqual(json_data['body'], "bar updated") # 测试 DELETE 请求 def test_delete_post(self): response = requests.delete(f"{self.base_url}/posts/1", headers=self.headers) # 验证响应状态码 self.assertEqual(response.status_code, 200)if __name__ == '__main__': unittest.main()php1.71 KB© 菜鸟-创作你的创作
setUp()
和 tearDown()
方法:setUp()
用于测试前的初始化,通常用于设置请求的 URL 或其他共享资源。tearDown()
用于测试后的清理工作,比如断开数据库连接、清理缓存等。requests
库:requests.get()
:发送 GET 请求。requests.post()
:发送 POST 请求。requests.put()
:发送 PUT 请求。requests.delete()
:发送 DELETE 请求。self.assertEqual()
:验证返回的 HTTP 状态码、响应数据是否符合预期。response.json()
:将响应内容解析为 JSON 格式。response.status_code
:获取响应的 HTTP 状态码。test_api.py
)。python test_api.pyphp18 Bytes© 菜鸟-创作你的创作
运行后,unittest
会自动发现并执行测试类中的所有方法,并显示测试结果。
setUp()
和 tearDown()
方法如果接口测试需要前置和后置操作,可以使用 setUp()
和 tearDown()
方法。
import unittestimport requestsclass TestAPI(unittest.TestCase): def setUp(self): """ 在每个测试之前执行,进行测试环境的准备 """ self.base_url = "https://jsonplaceholder.typicode.com" self.headers = {"Content-Type": "application/json"} def tearDown(self): """ 在每个测试之后执行,进行环境清理 """ pass def test_get_user(self): response = requests.get(f"{self.base_url}/users/1", headers=self.headers) self.assertEqual(response.status_code, 200) data = response.json() self.assertEqual(data['id'], 1)if __name__ == '__main__': unittest.main()php601 Bytes© 菜鸟-创作你的创作
有时我们希望跳过某些测试,可以使用 @unittest.skip
装饰器。
@unittest.skip("Skipping this test")def test_skip_example(self): # 该测试将会被跳过 passphp89 Bytes© 菜鸟-创作你的创作
我们可以将多个测试组织在一起,在一个测试套件中执行。
def suite(): suite = unittest.TestSuite() suite.addTest(TestAPI("test_get_user")) suite.addTest(TestAPI("test_create_post")) return suiteif __name__ == '__main__': runner = unittest.TextTestRunner() runner.run(suite())php244 Bytes© 菜鸟-创作你的创作
assertEqual(a, b)
:验证 a == b
。assertNotEqual(a, b)
:验证 a != b
。assertTrue(x)
:验证 x
为 True
。assertFalse(x)
:验证 x
为 False
。assertIn(a, b)
:验证 a
是否在 b
中。assertIsNone(x)
:验证 x
是否为 None
。assertRaises(exception, func, *args, **kwargs)
:验证 func
执行时是否抛出 exception
异常。通过 unittest
框架进行接口自动化测试非常方便。我们可以通过继承 unittest.TestCase
来组织测试,通过 requests
库发送 HTTP 请求与接口进行交互。unittest
提供了强大的断言功能,帮助我们验证接口返回的数据和状态。
常见的操作包括:
requests
发送不同类型的请求(GET、POST、PUT、DELETE)。setUp()
和 tearDown()
方法进行环境的初始化与清理。通过合理组织测试代码,接口自动化测试可以帮助我们高效地验证接口的正确性,提升开发效率并减少回归错误。https://www.52runoob.com/archives/4898
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。