面试点:
    HTTP协议:超文本传输协议,软件系统之间通讯首选协议
    特点:通讯双方分为客户端和服务端,基于TCP协议(先建立TCP连接)
    方式:客户端先发送http请求给服务器,服务端发送http响应给客户端
    (F12,NetWork显示网络上所有的http请求)
    GET获取资源信息
    POST:添加资源信息到服务器进行处理
    PUT:请求服务器更新信息
    DELETE:请求服务器删除信息
    请求消息:

    请求行:GET /api/mgr/login.html HTTP1.1 (中间的写地址后面的) 请求头:Host:www.baiyueheiyu.com即使是同一个ip和端口,也可能会有不同的网站 User-Agent:Mozilla/6.0 Accept-Language:zh-cn
    Accept-Encoding:gzip、default 请求消息体(与请求头间隔一行):name=qingmeisu&sn=099877883&desc=qinmeisuyao

    在Request Headers(请求的消息头) Request Payload(修改的内容)web API文本格式:Json、Xml、www-form-urlencoded

    响应消息:

    响应行:HTTP/1.1 200 ok(协议版本 状态码 描述状态的短语) 响应头: Date: Server: Content-Type: Content-Length: X-Frame-Options:SAMEORGIN Vary:Cookie 消息体:{“ret”:0, “retlist”:[], “total”.0} 如果服务端地址发生改变,客户端发起请求会在响应头字段里面给出反馈,重新发送

    状态码:

    2xx:表示请求消息没有问题,常见200 3xx:重定向响应,常见值301,302,表示客户端请求的url地址已经改变,需要客户端重新发起一个请求到另外的url 4xx:表示客户端请求有错误,常见值有: 400 Bad Request表示客户端请求不符合接口要求,比如格式完全错误; 401 Unauthorized表示客户端要先认证才能发送次请求; 403 Forbidden表示客户端没有权限要求服务器处理这样的请求, 比如普通用户请求删除别人账号等等 404 Not Found表示客户端请求的url不存在 5xx:表示服务端在处理请求中,发生了未知的错误(比如数据库服务宕机)

    什么是接口测试:

    是对软件系统消息交互接口的测试,消息交互接口是软件系统和其他软件系统交互的那部分 接口测试就是根据接口规范,写出测试用例。使用软件工具,直接通过消息接口对被测系统进行消息收发;验证被测系统行为是否正确。 API接口测试(HTTP协议特点是客户端与服务器端相互发送,有点类似程序中的API调用) 网页、图片、css这些资源,都是静态资源,服务器端不需要做特别处理 接口测试需要工具和被测系统之间进行消息的收发,基于HTTP的接口测试工具,常见的有Postman、Jemeter等(怎么做接口测试的) Python可以使用requests库,自己写代码发送接收HTTP请求

    一定要做接口测试吗?

    内部接口不需要测试(开发人员自己),产品与外部的服务器产生交互

    接口测试工具:

    获取接口文档,根据文档写出测试用例,使用软件工具进行测试 Cookie 是浏览器访问服务器后,服务器传给浏览器的一段数据 sessionid用来判断是同一次会话 编写测试用例的方法:条件组合、边界值、错误猜测等等

    客户药品订单
    没有客户,没有药品,没有订单
    没有客户,有药品,没有订单
    有客户,没有药品,没有订单
    有客户,有药品,没有订单
    有客户,有药品,有订单

    image.png

    python编程语言自己开发测试工具:requests

    Requests库是用来发送HTTP请求,接收HTTP响应的一个Python库

    1. pip install requests安装
    2. import requests
    3. # 设置代理
    4. paras = {
    5. 'wd':iphone
    6. 'rsv_spt':'1'
    7. }
    8. proxies = {
    9. 'http':'http://127.0.0.1:8888'
    10. }
    11. response = requests.get('http://httpbin.org/post', params=paras, proxies=proxies)
    12. print(response.test) //响应可以直接用请求的返回值
    13. #params参数将数据传入url
    14. #headers将参数传入消息头中
    15. #data是放在消息体中
    16. data=json.dump(payload) python的格式自动转换为json的字符串格式
    17. data=json.dump(payload, ensure_ascii=False).encode())
    18. print(response.status_code) 打印返回的状态码

    抓包工具Fiddler:

    用来查看具体的发送请求消息和接收响应消息 在客户端和服务端之间添加代理(fiddler) Filters设置抓包地址

    构建API请求:

    url参数:https://www.baidu.com/s?**wd=iphone&rev_spt=1**就是url参数 每个参数之间是用&隔开的,参数格式urlencode格式

    构建消息体:
    image.png
    image.png
    image.png用’’’ ‘’’变成字符串存在消息体中

    检查HTTP响应状态码

    print(response.status_code)

    检查响应消息头

    print(type(response.headers)) pprint.pprint(dict(response.headers)) response.headers对象的类型是继承子Dict字典类型的一个类

    检查响应消息体

    获取响应消息体文本内容,直接通过response对象的text属性即可获取 requests是以什么编码格式把HTTP响应消息体中的字节串解码为字符串呢? requests会根据响应消息头(比如Content-Type)对编码格式做出推测 Content-Type:text/html;charset=utf-8 但是有时候,服务端并不一定会在消息头中指定编码格式,这时,requests推测可能有误,需要我们指定编码格式

    print(r.text)
    print(r.encoding)
    r.encoding = ‘utf8’
    如果我们需要直接获取消息体中的字节串的话,可以使用content属性

    print(response.content.decode(‘utf8’)) //decode解码

    API响应消息体格式,通常以json居多
    json.loads(response.content.decode(‘utf8’)) //loads将python中的字符串反序列化为python中的数据对象

    print(obj[‘form’][‘2’]) //取出obj里面form里面,key=2的元素的值