1.requests库的使用
requests是python的一个HTTP客户端库,跟urllib,urllib2类似,“python的标准库urllib2提供了大部分需要的HTTP功能,但是API太逆天了,一个简单的功能就需要一大堆代码。”
1. 安装
pip install requests
2.import requests
3.发送请求
requests.get('http://www.baidu.com')
配置url参数
params 关键字参数,以一个字典来提供这些参数
payload = {'key1': 'value1', 'key2': 'value2'}
requests.get("http://httpbin.org/get", params=payload)
requests.post(url)
表单提交
data传入字典
payload = {'key1': 'value1', 'key2': 'value2'}
requests.post("http://httpbin.org/post", data=payload)
x-www-form-urlencoded形式
headers增加配置 Content-Type:application/x-www-form-urlencoded
data传入字典
raw(文本)提交
字符串形式\xml形式
payload = ' r = requests.post(url, data=payload) json形式 方式一:字典转字符串 payload = {'some': 'data'} r = requests.post(url, data=json.dumps(payload)) payload = {'some': 'data'} r = requests.post(url, json=payload) 二进制形式(文件)提交 files参数 files = {'file': open('report.xls', 'rb')} requests.post(url, files=files) 定制请求头 headers 字典 url = 'https://api.github.com/some/endpoint' headers = {'user-agent': 'my-app/0.0.1'} requests.get(url, headers=headers) 添加Cookie cookies 字典 cookies = dict(cookies_are='working') cookies ={'cookies_are':'working'} requests.get(url, cookies=cookies) 超时 requests.get('http://github.com', timeout=0.001) timeout 仅对连接过程有效,与响应体的下载无关 超时则抛出requests.exceptions.Timeout 4.接收请求 requests的get和post方法返回值都是Response对象,其存储了服务器响应的内容 响应状态码:response.status_code response.raise_for_status() #失败请求(非200响应)抛出异常 响应头:response.headers--字典 Cookie: response.cookies--字典 响应体:response.text 解析响应 引入 import json 1.json格式 response.json() --响应字符串转json对象(字典) 2.xml格式 python解析xml方式 使用ElementTree 1.加载xml--加载XML文件共有2种方法,一是加载指定字符串,二是加载指定文件 root = ElementTree.fromstring(text) root = ElementTree.parse("D:/test.xml") 2.获取对象 find方法 (支持部分xpath语法) findall方法 (支持部分xpath语法) 注意命名空间:节点tag名称之前添加 {xxxx} 3.获取值、属性 .text .attrib['category'] 4.添加命名空间 2.完成天气预报两个接口的脚本编写 getSupportCityString01 getSupportCityString02 3.单元测试框架的使用 三个概念 Test Case 一个测试用例就是一个完整的测试单元,包含初始和收尾工作 基本单元为函数 Test Suite 一个功能往往有多个测试用例验证,用例的集合称为测试套件 Test Runner 测试用例执行的基本单元 用例组织 方式一:函数是用例,集中在一个类中 继承unittest.TestCase 每个用例都是一个无参的成员方法 方法名为test开头 名为runTest 主函数中调用unitest.main()函数 运行类中以test开头的所有测试用例 方式二:构造测试集合 (比较难) unittest.TestSuite() .addTest(类名("方法名")) 类需要事先import unittest.TextTestRunner().run(suite) 创建run.py 断言使用 用例执行结果 成功 没有未处理的异常 and 一个或多个断言全部成功 失败 抛出任何未知的或未捕获的异常 or 至少一个断言失败 unittest的原始断言 unittest.TestCase类的成员方法 assertEqual(a, b)判断a==b assertNotEqual(a, b)判断a!=b assertIs(a, b) a is b assertIsNot(a, b) a is not b assertIsNone(x) x is None assertIsNotNone(x) x is not None assertIn(a, b)a in b assertNotIn(a, b) a not in b assertIsInstance(a, b) isinstance(a, b) assertNotIsInstance(a, b) not isinstance(a, b)