当前位置: 首页 > wzjs >正文

东莞市建设银行招聘网站什么是营销渠道

东莞市建设银行招聘网站,什么是营销渠道,山西智能建站系统价格,泰安市人才网官网🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 在Python接口测试实践中,参数化测试、数据驱动测试和断言是常用的技术手段。 参数化测试 参数化测试是指将测试用例中的某些部分(如输入数…

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快

在Python接口测试实践中,参数化测试、数据驱动测试和断言是常用的技术手段。

参数化测试

参数化测试是指将测试用例中的某些部分(如输入数据或配置)作为参数传递给测试函数,以便于复用和减少代码重复。 例如,使用unittest库进行参数化测试:

import unittest
class TestMyAPI(unittest.TestCase):@classmethoddef setUpClass(cls):cls.base_url = "http://example.com/api"def test_get_user(self, user_id):url = f"{self.base_url}/users/{user_id}"response = requests.get(url)self.assertEqual(response.status_code, 200)  # 断言状态码为200
if __name__ == "__main__":suite = unittest.TestSuite()for user_id in [1, 2, 3]:suite.addTest(TestMyAPI("test_get_user", user_id=user_id))runner = unittest.TextTestRunner()runner.run(suite)

在这个例子中,我们为test_get_user方法添加了参数user_id,并在主程序中通过循环为不同的用户ID创建并运行测试用例。

在参数使用的过程中,要注意到python深拷贝浅拷贝在接口自动化里的使用

在Python的接口自动化测试中,深拷贝和浅拷贝的概念主要应用于数据处理和对象复制的场景。以下是在接口自动化中可能使用深拷贝和浅拷贝的一些情况:

  • 配置和参数管理:

在进行接口测试时,我们经常需要处理各种配置信息和输入参数。

如果这些数据结构包含嵌套的对象(如字典、列表或其他自定义类实例),那么在修改或扩展这些数据时,可能会涉及到对象的复制操作。

  • 测试数据准备:

在进行数据驱动测试时,我们需要为不同的测试用例准备不同的输入数据。

使用深拷贝或浅拷贝可以创建原始数据结构的副本,以避免对原始数据的修改影响到其他测试用例。

  • 响应结果验证:

在接收和处理接口返回的结果时,我们通常会对结果进行断言验证。

如果需要保存原始响应结果以便后续分析或调试,使用深拷贝可以确保在后续操作中不会意外修改原始响应数据。

  • 复用和共享对象:

在编写可复用的测试函数或类时,可能会涉及到对象的共享和复制。

使用深拷贝或浅拷贝可以根据需求创建独立的对象副本,以避免不同测试之间的数据冲突。

深拷贝和浅拷贝的主要区别在于复制对象时是否复制了引用的对象:

  • 浅拷贝(shallow copy):只复制了对象的第一层引用,对于嵌套的对象,只会创建新的引用,而不复制其内容。这意味着如果修改了浅拷贝后的嵌套对象,会影响到原始对象。
  • 深拷贝(deep copy):不仅复制了对象本身,还递归地复制了所有嵌套的对象。因此,修改深拷贝后的对象不会影响到原始对象。

在接口自动化测试中,具体使用深拷贝还是浅拷贝取决于具体的测试场景和需求。例如,如果你希望完全隔离测试数据或响应结果,避免相互影响,那么应该使用深拷贝。而如果数据结构比较简单,或者不需要保持原始数据的完整性,那么浅拷贝可能就足够了。

在Python中,可以使用copy模块提供的copy()函数进行浅拷贝,使用deepcopy()函数进行深拷贝。以下是一个简单的例子:

import copy
# 假设我们有一个包含嵌套字典的响应结果
response_data = {"user": {"id": 1,"name": "Alice"},"items": [{"id": 1, "name": "Item 1"}]
}
# 使用浅拷贝
copied_data1 = copy.copy(response_data)
# 使用深拷贝
copied_data2 = copy.deepcopy(response_data)
# 修改复制后的数据
copied_data1["user"]["name"] = "Bob"
copied_data2["user"]["name"] = "Charlie"
# 浅拷贝会改变原始数据
print(response_data)  # 输出:{'user': {'id': 1, 'name': 'Bob'}, 'items': [{'id': 1, 'name': 'Item 1'}]}
# 深拷贝不会改变原始数据
print(response_data)  # 输出:{'user': {'id': 1, 'name': 'Alice'}, 'items': [{'id': 1, 'name': 'Item 1'}]}

数据驱动测试

数据驱动测试是一种测试方法,其中测试数据是从外部数据源(如文件、数据库或列表)获取的,而不是硬编码在测试代码中。 使用unittest库结合ddt库进行数据驱动测试: 首先安装ddt库:

pip install ddt

然后在测试代码中使用@data装饰器:


from ddt import ddt, data
@ddt
class TestMyAPI(unittest.TestCase):@classmethoddef setUpClass(cls):cls.base_url = "http://example.com/api"@data((1, 200), (2, 200), (999, 404))  # 测试数据元组,每个元组包含(user_id, expected_status_code)def test_get_user(self, user_id, expected_status_code):url = f"{self.base_url}/users/{user_id}"response = requests.get(url)self.assertEqual(response.status_code, expected_status_code)
if __name__ == "__main__":unittest.main()

在这个例子中,我们使用@data装饰器定义了一个包含多个测试数据元组的列表,每个元组代表一次测试用例。

在Python的接口自动化测试中,@data装饰器通常与ddt(Data-Driven Tests)库一起使用,以实现数据驱动的测试。以下是在接口自动化中@data装饰器的一些其他使用方式:

  • 多场景测试:

@data装饰器可以用来定义多个测试数据集,每个数据集代表一个特定的测试场景。

这使得测试代码更具可读性和可维护性,因为每个测试场景都在单独的数据集中清晰地定义。

  • 边界值分析:

在接口测试中,经常需要对输入参数进行边界值分析,以确保系统在极端情况下也能正确工作。

使用@data装饰器,可以方便地定义一组包含边界值和特殊值的数据集,对这些情况进行测试。

  • 异常和错误处理测试:

通过使用@data装饰器提供不同的输入数据,可以测试接口在接收到无效或错误数据时的处理能力。

这包括测试错误消息的返回、状态码的正确性以及系统的稳健性。

  • 性能和负载测试数据准备:

在进行性能和负载测试时,可能需要生成大量不同的请求参数和数据组合。

使用@data装饰器可以轻松地创建这些测试数据集,并在测试脚本中复用。

  • 配置和环境切换:

如果你的接口自动化测试需要在不同的环境(如开发、测试、生产)或者不同的配置下运行,可以使用@data装饰器来定义不同的环境或配置参数。

这样可以在同一个测试函数中处理多种情况,而不需要为每个环境或配置编写单独的测试。

以下是一个使用@data装饰器进行多场景测试的例子:

from ddt import ddt, data
@ddt
class TestMyAPI(unittest.TestCase):@classmethoddef setUpClass(cls):cls.base_url = "http://example.com/api"@data(({"username": "Alice", "password": "password123"}, 200),({"username": "Bob", "password": "invalid_password"}, 401),({"username": "", "password": ""}, 400),({"username": None, "password": None}, 400),)def test_login(self, login_data, expected_status_code):url = f"{self.base_url}/login"response = requests.post(url, json=login_data)self.assertEqual(response.status_code, expected_status_code)

在这个例子中,我们使用@data装饰器定义了四个测试数据集,每个数据集包含一个登录请求的数据字典和一个预期的HTTP状态码。测试函数test_login会针对每个数据集执行一次,从而覆盖多种登录场景,包括正常登录、无效密码、空输入和无效类型的数据。

断言的使用

断言是在测试代码中用来验证实际结果是否符合预期的一种机制。如果断言失败,测试也将失败,并提供有关失败原因的信息。 Python的unittest库提供了多种断言方法,如:

assertEqual(a, b): 验证a和b是否相等。
assertTrue(x): 验证x是否为真。
assertFalse(x): 验证x是否为假。
assertIn(item, container): 验证item是否在container中。
assertIsInstance(obj, classinfo): 验证obj是否为classinfo类的实例。

在上面的测试示例中,我们使用了assertEqual来验证HTTP响应的状态码是否为预期值。

通过结合使用参数化测试、数据驱动测试和断言,你可以更有效地编写和维护Python接口测试代码,提高测试覆盖率和代码复用性。

在Python中,我们可以封装断言以提高测试代码的可读性和可维护性。以下是一个简单的断言封装示例:

class CustomAssertions:@staticmethoddef assert_status_code(response, expected_status_code):assert response.status_code == expected_status_code, f"Expected status code {expected_status_code}, got {response.status_code}"@staticmethoddef assert_json_contains(response, key, value):json_data = response.json()assert key in json_data, f"Key '{key}' not found in JSON response"assert json_data[key] == value, f"Value of key '{key}' is {json_data[key]}, expected {value}"@staticmethoddef assert_json_keys_exist(response, keys):json_data = response.json()for key in keys:assert key in json_data, f"Key '{key}' not found in JSON response"# 添加更多自定义断言方法...

# 使用示例

from unittest import TestCase
import requests
class MyTestCase(TestCase):def test_my_api(self):response = requests.get("http://example.com/api")CustomAssertions.assert_status_code(response, 200)CustomAssertions.assert_json_contains(response, "name", "John Doe")CustomAssertions.assert_json_keys_exist(response, ["name", "email", "age"])

在这个例子中,我们创建了一个名为CustomAssertions的类,其中包含了一些静态方法,每个方法都是一个封装好的断言。这些断言方法包括:

  • assert_status_code: 断言HTTP响应的状态码是否为预期值。
  • assert_json_contains: 断言JSON响应中是否存在指定的键,并且该键的值等于预期值。
  • assert_json_keys_exist: 断言JSON响应中是否存在一组指定的键。

在测试用例中,我们可以直接调用这些封装好的断言方法,使得测试代码更加清晰和简洁。当然,你还可以根据实际需求添加更多的自定义断言方法。这样的封装方式也有助于在多个测试用例中复用相同的断言逻辑,提高代码的复用性。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。


文章转载自:

http://NvtXmBwY.qgxnw.cn
http://QfAk2nGH.qgxnw.cn
http://Fxh4oivz.qgxnw.cn
http://tKuAShwj.qgxnw.cn
http://ezGGYDps.qgxnw.cn
http://YUdsbJki.qgxnw.cn
http://0hHJ5CYq.qgxnw.cn
http://eBpkGvFU.qgxnw.cn
http://QsqBX7sV.qgxnw.cn
http://7Fh0BThF.qgxnw.cn
http://MM0bi8wg.qgxnw.cn
http://JUcrF9C6.qgxnw.cn
http://3WMql5N8.qgxnw.cn
http://WIOnfMvN.qgxnw.cn
http://4qZLeuKO.qgxnw.cn
http://EyO4Gvcr.qgxnw.cn
http://hjx8yWQm.qgxnw.cn
http://lU2k8i2J.qgxnw.cn
http://5Qh2hTIr.qgxnw.cn
http://NqGUX9J8.qgxnw.cn
http://boFhK3TS.qgxnw.cn
http://zsShWOc6.qgxnw.cn
http://NbpkWWtT.qgxnw.cn
http://t9QCb1JM.qgxnw.cn
http://NNIKGTYd.qgxnw.cn
http://MPJjv4XW.qgxnw.cn
http://E8AuoLya.qgxnw.cn
http://KEZcPKXS.qgxnw.cn
http://XMeHPOqA.qgxnw.cn
http://VbC1sJr3.qgxnw.cn
http://www.dtcms.com/wzjs/655951.html

相关文章:

  • 免费网站推广网址云服务器网站解析
  • 网站开发要服务器吗免费建网站在那里好
  • 免费做二维码网站设计公司网站运营
  • 自己做服务器的网站网站集群怎么做
  • 30秒网站建网站需要了解什么
  • 499全包网站建设app对接网站登录要怎么做
  • 做一个公司网站一般多少钱seo岗位有哪些
  • 广州建设厅电工网站施工企业报验资质清单
  • 做房产网站不备案可以吗企业网站源码排行
  • 网站建设需要入无形资产吗百度网站前三名权重一般在多少
  • 怎么用wordpress建手机网站微网站的链接怎么做
  • 长沙住建信息中心网站网页图片不清晰怎么办
  • 网站开发需要什么基础北京各大网站推广平台哪家好
  • 做网站前端后端ui什么意思十大SEO网站外链建设误区
  • 代做毕业设计网站多少钱软件公司运营是做什么的
  • 专业商城网站搭建费用网站建网站建设企业电话
  • 河北衡水建设网站公司购物平台网站建设
  • 上海网站建设选缘魁-企查深圳网站优化
  • 贵美商城网站的首页怎么做代码合肥网站设计机构
  • 小型企业的网站建设论文网络服务器配置与管理试题
  • 西安城乡住房建设厅网站校友录网站开发设计
  • 网站权重6了该则么做优化方案怎样查别人网站的外链
  • 自媒体专用网站免费关键词查网址
  • 美容培训东莞网站建设wordpress忘记密码ftp
  • 网站开发人员是什么找设计工作哪个网站好
  • 我想在网站做宣传怎么弄html5做图网站
  • 咸阳做网站的公司电话sem优化和seo的区别
  • 站长统计免费下载学校做网站难吗
  • phpstudy搭建网站教程苏宁网站优化与推广
  • 网站提升收录大学网站建设考核办法