Python post test

本文介绍了一个使用Python2.7进行网络请求的具体示例。通过使用urllib2和cookielib模块,文章展示了如何设置HTTP Cookie处理器并发送带有表单数据的POST请求。此外,还演示了如何读取服务器响应。

Python2.7


页面地址:测试页面


import urllib
import urllib2
import cookielib

cooker = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cooker))
opener.addheaders = [('User-agent','Mzilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)')]
urllib2.install_opener(opener)

url = 'http://windroid.kuphp.net/Python-post-text/welcome.php'
qst = {'name':'Python-post-text','password':'text-password'}

request = urllib2.Request(url,urllib.urlencode(qst))
result = urllib2.urlopen(request)
html = result.read()
print html

#注意这里提交的地址不是index.php而是welcome.php


welcome.php

<html>
<body>
Welcome <?php echo $_POST['name']; ?><br>
Your password is: <?php echo $_POST['password']; ?>

</body>
</html>


<think>嗯,用户的问题是关于如何使用Python生成POST请求的测试报告。首先,我需要明确用户的需求。他们可能已经知道如何发送POST请求,但现在需要生成测试报告来验证这些请求的结果。测试报告通常包括请求的响应状态码、响应内容、执行时间以及可能的错误信息。 根据用户提供的引用内容,引用[2]和[3]提到了使用requests库发送POST请求的示例代码。而测试报告生成可能需要结合测试框架,比如unittest或pytest,或者使用专门的报告生成库如HTMLTestRunner或Allure。此外,引用[4]提到异常处理的重要性,这在测试中也是关键,需要捕获可能的错误并记录到报告中。 首先,用户可能需要了解如何组织测试用例,发送POST请求,然后收集结果。比如,使用unittest框架编写测试类,每个测试方法对应一个POST请求。然后,在tearDown方法中收集测试结果,或者使用装饰器来记录每个测试的执行情况。 然后,生成报告部分。HTMLTestRunner是一个常用的库,可以将测试结果输出为HTML格式,便于查看。另外,Allure框架可以生成更美观的交互式报告,但配置可能稍复杂。用户可能需要简单的解决方案,所以HTMLTestRunner可能更适合。 另外,用户可能希望测试报告中包含具体的请求数据、响应状态码、响应正文以及断言结果。因此,在测试用例中需要记录这些信息,并在生成报告时将其包含进去。例如,在测试方法中,使用self.assertEqual来断言响应状态码是否为200,并记录响应内容。 还有,用户提到的测试报告可能包括多个请求的统计信息,比如成功率、失败率、执行时间等。这需要在测试运行结束后汇总所有测试用例的结果,并生成摘要信息。 现在,我需要考虑如何将发送POST请求的代码与测试框架结合起来。例如,在unittest.TestCase的子类中,每个测试方法执行一个POST请求,并使用断言来验证响应。测试运行完成后,使用HTMLTestRunner生成报告。 可能的步骤是: 1. 安装必要的库(requests, unittest, HTMLTestRunner)。 2. 创建测试类,继承unittest.TestCase。 3. 在测试方法中发送POST请求,并添加断言。 4. 捕获异常和测试结果。 5. 使用HTMLTestRunner运行测试并生成HTML报告。 此外,用户可能需要自定义报告内容,比如添加请求参数、响应时间等。这可以通过重写测试框架中的方法,或者在测试用例中手动记录这些信息。 需要注意的是,用户提供的引用中有使用json.dumps(data)来发送JSON数据,这在测试中也需要正确处理,确保请求体的格式正确。同时,异常处理如网络错误、超时等,需要在测试用例中捕获,并标记测试结果为失败,同时记录错误信息到报告中。 可能的问题是如何在报告中展示每个测试用例的详细信息。HTMLTestRunner默认会显示测试的名称、结果、错误信息等,但若要添加更多自定义字段,可能需要扩展测试运行器或使用更高级的报告工具。 总结来说,解决方案应包括编写测试用例、执行测试并收集结果、生成报告三个主要步骤,结合现有的测试框架和报告生成库来实现。同时,引用中的代码示例可以作为发送POST请求的基础,再结合测试框架的结构进行整合。</think>### Python生成POST请求测试报告的步骤 #### 1. 测试框架选择 使用`unittest`框架管理测试用例,结合`HTMLTestRunner`生成可视化报告[^1][^2]。 #### 2. 安装依赖库 ```bash pip install requests html-testRunner ``` #### 3. 编写测试用例 ```python import unittest import requests import json import time class TestPostRequests(unittest.TestCase): def test_login_success(self): """测试登录成功场景""" url = "https://api.example.com/login" data = {"username": "admin", "password": "123456"} start_time = time.time() try: response = requests.post(url, json=data, timeout=5) self.assertEqual(response.status_code, 200) self.assertIn("token", response.json()) except Exception as e: self.fail(f"请求失败: {str(e)}") finally: self._report_data = { "case_name": "登录成功测试", "duration": round(time.time() - start_time, 2), "status": "Pass" if response.status_code == 200 else "Fail", "request": json.dumps(data, indent=2), "response": response.text } # 添加更多测试用例... ``` #### 4. 生成测试报告 ```python if __name__ == "__main__": from HtmlTestRunner import HTMLTestRunner suite = unittest.TestLoader().loadTestsFromTestCase(TestPostRequests) runner = HTMLTestRunner( output="test_reports", report_name="POST请求测试报告", report_title="接口自动化测试报告", combine_reports=True ) runner.run(suite) ``` #### 5. 报告内容说明 生成的HTML报告包含: - 用例执行状态(Pass/Fail) - 请求参数和响应内容 - 执行时间统计 - 错误堆栈信息[^3] #### 6. 高级优化建议 1. **参数化测试**:使用`@parameterized.expand`处理多组测试数据 2. **异常捕获**:添加网络超时、JSON解析异常处理[^4] 3. **性能统计**:记录响应时间并生成性能趋势图 4. **结果断言扩展**:验证响应头、数据库一致性等 ```python # 参数化示例 from parameterized import parameterized class TestPostRequests(unittest.TestCase): @parameterized.expand([ ("空密码测试", {"username": "admin", "password": ""}, 400), ("错误密码测试", {"username": "admin", "password": "wrong"}, 401) ]) def test_login_failure(self, case_name, data, expected_code): response = requests.post(LOGIN_URL, json=data) self.assertEqual(response.status_code, expected_code) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值