举例如何使用Python unittest 模块进行接口测试

使用场景:

对某个接口或者功能进行各种数据输入的测试。

如: 不同账号、密码组合的登录测试; 不同查询条件组合的查询测试。

 

测试工具:

Python 的unittest 模块。

 

例子:

demo 测试所使用的接口:

http://finance.yahoo.com/d/quotes.csv?e=.csv&f=sl1d1t1&s=USDCNY=x

这个接口用以进行不同汇率直接的汇率转换查询。其中红色部分为我们测试的参数输入组合。USDCNY表示查询USD到CNY 的汇率。

接口发起方式:需要使用 http 的get 方法。

数据返回:

"USDCNY=x",6.7192,"8/4/2017","5:01am" ,包括对应的汇率值、最新更新日期、时间等。

 

测试目的:

对于币种A 和B ,分别以 A-B 和 B-A 的格式进行查询,判断返回的汇率之积是否等于1.

输入多个不同的币种组合,测试是否都能符合这个条件。

 

思路分析:

1. 首先需要将以上的接口调用进行封装,输入参数分别是 fromCurrency, toCurrency 。经过文本拼接、替换后调用 http get 请求进行查询,并在查询结果中获取对应的汇率值,返回。

根据以上分析,分别编写发送http 请求的 sendRequest方法,和查询汇率的search 方法:

经过调试,以上方法可正常调用并返回对应结果,开始进行下一步处理。

 

2. 引入单元测试:

新建一个单元测试类。其中包括三类方法:

2.1 setup:通用的开始方法,可以把每个用例都需要用到的前置步骤放到这里,如通用的登录步骤。

2.2 tearDown:通用的结束方法,可以把每个用例都需要用到的后置步骤放到这里,如关闭浏览器等。

2.3 具体的测试方法:方法名需要以 test 开头。根据测试的需要,可以添加多个不同的测试方法,来测试不同的数据组合。

 

光标放在test1,右键选择 run- unittest test1. 测试 test1 方法是否成功。

 

3. 根据不同的数据组合,添加其他的测试类。

 

至此整个测试脚本就编写好了。

demo 代码地址:https://github.com/jerrylizilong/jerry-demo

 

 

 

转载于:https://my.oschina.net/u/1447352/blog/1502706

<think>好的,用户现在问的是用Python和pytest能进行哪些车载测试的工作。首先,我需要回想一下之前用户的问题历史。之前他们问过可迭代对象,现在转向了车载测试,这可能是一个汽车行业相关的开发者或测试人员。 用户可能对Python和pytest有一定的了解,但想了解如何将其应用到车载测试的具体场景。他们的真实需求可能是在汽车软件开发或测试中寻找自动化测试的方案,提高效率。 接下来,我需要明确车载测试包括哪些方面。车载系统通常涉及ECU、CAN总线、诊断协议、HMI、ADAS、OTA等。Python和pytest在这些方面的应用可能包括单元测试、集成测试、协议测试、自动化脚本等。 然后,我需要具体举例说明每个测试领域如何使用Python和pytest。例如,使用python-can库处理CAN总线消息,用pytest编写测试用例来验证信号解析。或者用Selenium测试车载娱乐系统的界面。 还要考虑用户可能的误区,比如是否了解车载测试的具体协议或工具,是否需要推荐相关库或框架,比如uds协议库、pytest的插件等。此外,可能需要提到持续集成、报告生成等进阶内容,帮助用户构建完整的测试流程。 最后,要确保回答结构清晰,分点说明各个应用场景,并给出代码示例,让用户更容易理解如何实施。同时,强调Python+pytest的优势,如灵活、社区支持、扩展性等,以满足用户潜在的深层需求,比如寻找高效、可靠的测试方案。</think>Python + pytest 是一个非常灵活的组合,在车载测试中可以覆盖从底层协议到上层功能的多种测试场景。以下是具体的应用领域和示例: --- ### **1. 车载通信协议测试** - **CAN/LIN/FlexRay 总线测试** 通过 Python 的 `python-can` 库发送/解析 CAN 报文,验证 ECU(电子控制单元)的通信逻辑。 ```python import can def test_can_message(): bus = can.interface.Bus(channel='can0', bustype='socketcan') msg = can.Message(arbitration_id=0x123, data=[0x01, 0x02]) bus.send(msg) received_msg = bus.recv(timeout=1) assert received_msg.arbitration_id == 0x123, "ID 不匹配" ``` - **诊断协议测试(UDS)** 使用 `uds` 或 `python-udsoncan` 库验证诊断服务(如读取故障码、刷写固件)。 ```python import udsoncan def test_read_dtc(): conn = udsoncan.Connection(...) # 连接诊断接口 response = conn.send_request(udsoncan.services.ReadDTCInformation.Subfunction.reportDTCByStatusMask) assert response.positive, "读取故障码失败" ``` --- ### **2. 车载功能测试** - **HMI(人机交互界面)测试** 结合 `Selenium` 或 `Appium` 自动化测试车载屏幕触控、菜单逻辑。 ```python from appium import webdriver def test_touch_screen(): driver = webdriver.Remote(...) # 连接车载系统 driver.find_element_by_id("nav_button").click() assert driver.current_activity == "NavigationActivity", "导航界面未启动" ``` - **ADAS 功能测试** 模拟传感器输入(摄像头、雷达),验证自动刹车、车道保持等逻辑。 ```python def test_auto_brake(): simulate_radar_input(distance=5, speed=60) # 模拟前方障碍物 brake_response = get_ecu_response("BrakeActuator") assert brake_response > 50, "自动刹车未触发" ``` --- ### **3. 性能与可靠性测试** - **ECU 负载测试** 高频率发送报文,测试 ECU 的响应稳定性。 ```python import pytest @pytest.mark.stress def test_ecu_stress(): for _ in range(10000): send_can_message(0x456, data=[0xFF]) assert get_response_time() < 100, "ECU 响应超时" ``` - **温度/电压边界测试** 通过硬件接口模拟极端环境,验证系统鲁棒性。 ```python def test_voltage_boundary(): set_power_supply(voltage=3.0) # 模拟低电压 system_status = read_system_status() assert system_status == "NORMAL", "低电压下系统异常" ``` --- ### **4. 自动化测试框架集成** - **持续集成(CI)** 将 pytest 与 Jenkins/GitLab CI 集成,实现代码提交后自动触发车载测试。 ```yaml # GitLab CI 示例 test_job: script: - pytest tests/vehicle_can/ - generate_report.html ``` - **测试报告与数据分析** 使用 `pytest-html` 生成可视化报告,结合 Pandas 分析测试结果。 ```python pytest.main(["--html=report.html"]) ``` --- ### **5. 仿真与 Mock 测试** - **虚拟 ECU 测试** 使用仿真工具(如 CANoe)配合 Python,模拟未实装的 ECU 行为。 ```python from unittest.mock import Mock def test_mock_ecu(): mock_ecu = Mock(return_value=0x7F) # 模拟 ECU 响应 assert parse_response(mock_ecu()) == "NEGATIVE_RESPONSE" ``` --- ### **优势总结** 1. **灵活性**:Python 丰富的库支持(CAN、UDS、Appium 等)。 2. **高效性**:pytest 的 Fixture 机制可复用测试环境(如初始化 CAN 总线连接)。 3. **可扩展性**:轻松集成硬件设备(Vector、Peak CAN 卡)和第三方工具。 如果需要更具体的场景(如 AUTOSAR 组件测试),可以进一步补充细节!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值