九、接口测试
9.1 接口测试怎么测
(jmeter版本)
首先开发会给我们一个接口文档,我们根据开发给的接口文档,进行测试点的分析,主要是考虑正常场景与异常场景,正常场景,条件的组合,参数的格式校验等价边界值;异常场景,多一个参数,少个必填参数,参数为空;接着编写测试用例,用的 Jmeter工具去运行,创建线程组,建立http请求,输入测试用例,请求参数,建立察看结果树,运行,看返回的结果,是否跟接口文档里面要求的返回结果一致,其他用例,值需要修改里面的参数,请求地址这些信息。
举例说明:(不要登录跟注册)
比如说原来我们做一个申请借款的接口,对接口进行测试分析,考虑正常场景与异常场景,正常场景,考虑不同参数组合,比如说,不同借款方式,还款期限,还款曰期,借款的利率等参数组合;也要测试每个参数格式校验,异常场景,:多一个参数,少一个必填参数,比如没有借款的利率,参数为空的,比如借款标题为空,编写测试用例
b站最牛Jmeter接口测试和Jmeter接口自动化测试全集_哔哩哔哩_bilibilib站最牛Jmeter接口测试和Jmeter接口自动化测试全集共计100条视频,包括:jmeter【接口测试分类】、jmeter【目前接口架构设计】、jmeter【市面上的接口测试工具】等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV1hq4y1K75i/?spm_id_from=333.999.0.0
在 jmeter中执行,填写参数,更地址就ok,发送请求
(python + request)
原来我们接口主要是用的 python + requests去运行的
首先,开发会给我们一个接口文档,拿到接口文档后,我们就进行测试点的分析,
考虑正确场景,条件的组合,
异常场景,多一个参数,少一个参数,参数为空的情况
比如原来我们做一个生成订单的接口,考虑正常场景,异常场景
正常场景就是不同的订单类型,订单金额,能不能申请订单,每个参数的格式类型的校验,
异常场景,多一个参数,少一个必填参数的时候,还有参数为空的情况
原来我们是用 python + request去做的接口
首先,导入 request包
建立一个 headers,保存请求头的信息,因为订单请求方式是post类型,数据格式是form表单格式,我们把数据保存到data的字典里面
这个时候我们还需求登录的 cookie值跟登录后产生的 token值
我们会去通过动态关联去获取登录的 token跟 cookies,
cookies值的话,我们是直接调用登录返回的 cookies、token值的时候,我能是通过导入re模块,通过正则表达式去提取
当参数, headers、cookies输入完成以后,我们就发送请求,打印返回结果,检返回结果是否跟我们测试用例一致
当运行其他测试用例时,我们去修改data里面的参数就行,在发送请求
有的请求时htps协议的时候,我们发送请求的时候还会very= false去忽略掉证书验
证对应多个接口调用 cookies我们会用到 session去保存接口发现比较多的问题,就是格式校验这块
比如说我们提交订单,订单数据没有显示,订单格式也没有显示,输入字母,汉字都可以
订单类型为空,也会生成订单成功
我觉得接口可以发现接口更多的bug,还可以提早进行测试,提高测试的质量
9.2 两个接口有关联, jmeter具体怎么做
另外两种问法:上个接口的返回值是下个接口的请求参数,这种如何处理?动态关联有没有了解过?
这个涉及到动态关联,首先要搞清楚后一个接口需要用到上一个接口的什么数据,例外要看数据是在哪里取的,是在head还是在body里,然后如果要取的数据是json格式我会在发请求用json提取器去取这个数据,如果是其他格式的就用边界提取器或正则表达式去取数据
就拿我当时做的那个下单接口来说吧,因为下单接口需要先登录,需要用到登录接口的
cookies来做鉴权,首先就是把登录接口调试通过,然后在登录接口的http请求中添加一
个边界值提取器或者也可以用正则表示式提取器去提取登录接口的响应头中的 cookies值
然后在下单接口中需要添加一个http cookies管理器,在http cookies管理器中引用登录
接口提取出来的 cookies,这样就可以了
如果是不同的线程组的话,那在登录接口中还得添加一个 Beanshell取样器,在
Beanshell取样器中,利用函数助手中的 SetProperty()函数把提取出来的 cookies设置为全局变量,然后在下单接口的http cookies管理器中利用函数助手中的Property()函数引用登录接口中设置的全局变量,这样就可以了。
9.3 接口测试主要目的是什么?
例外两种问法:接口测试的价值,意义?为什么要做接口测试?
主要就是验证后台服务端的业务逻有没有问题,提高测试的效率
①越底层发现bug,它的修复成本是越低的
②前端页面修改频繁情况下,接口测试不受页面元素改变而影响
③检查系统的安全性,前端传参不可信,比如京东购物,前端价格不可能传入-1元,但是
通过接口可以传入-1元
④如今的系统复杂度不断上升,传统的测试方法成本急剧增加且测试效率大幅下降,接口自动化测试可以提高测试效率
⑤接口测试相对容易实现自动化持续集成,且相对U自动化也比较稳定,可以减少人工,回归测试人力成本与时间,缩短测试周期
9.4 接口测试的流程
1,首先分析开发给到的接口文档
2,接口文档分析完成,编写测试用例
3,然后借助接口测试工具去测试执行测试用例
4,发现bug提交bug,并跟进bug修复
9.5 接口测试和平常的Ul测试有什么区别?
其实这两者测试的侧重点是不同的,接口因为没有界面,更多考虑后台服务器对请求的,处理逻辑问题,业务交互,检测的是后台“容错机制”是否完整;
而ui更多会去关注页面展示,数据转换,界面排序这些功能,当然也会后台数据处理的问题,ui测试其实已经包含了接口测试。系统功能的用例更全面,不仅有界面的,也有业务功能用例,还有其他用户场景的用例功能入口用例,流程用例,而接口测试主要根据各种入参场景来设置用例。
9.6 给你一个新的接口,你怎么去设计用例?
首先要对于每个要测的接口都要先搞清楚这个接口的功能,它的作用是什么,熟悉这个业务功能需要用到什么协议,请求方式是什么,接口有哪些参数。对于每个参数的作用都要搞清楚,像数的类型,是否有约束限制,是否为必填的,长度,其他的限制等等,如果两个参数之间有关联我们还要考虑参数的组合场景,对于参数不理解的,一般都会跟开发沟通下,然后考虑返回数据的类型,返回数据中的返回码和返回信息是什么,通过以上几个点去提炼测试点,设计用例。
参数约束——长度、必选项、格式、数据类型
业务场最——正确的业务场景;错误的业务场景;异常场景:服务器空间不足
组合场景——相互依赖:手机和验证码、用户名和验证码;
相互排斥:二选一当然还有边界值等价类等等
Jmeter测试流程,步骤如下:
创建 jmeter线程组一添加HPPT请求-输入协议-域-端口-路径-编码-请求方式-请求参数-启动
Jmeter测试流程:
先需求,再根据需求写测试点转换成测试用例,根据测试用例编写测试脚本;执行测试脚本;
提交BUG,跟踪BUG
9.7 接口文档主要包含哪些内容?
接口文档一般两种形式的,要不就是word版本的要不就是htm的形式,具体内容
1.URL(接口地址)
2.接口功能
3.请求方式:post
4.请求参数,以及接口中每个参数的详细说明,类型,是否为必填,约束条件等等
5.响应数据及格式,返回码,返回码解释等等
9.8 你们什么时候测试接口
一般有需求就会做,后台的接口开发好,就可以开始测。例外,如果增加了新需求,也要做接口测试,还有就是开发对后台的接口做了修改,交互逻辑发生变化,我们也要重新对接口进行测试。
9.9 你怎么去检查,分析
我们主要是根据入参情况,去看接口的返回值,对于返回值,我主要关注的几个点:1.状态码
2.提示信息3.返回数据的具体内容。根据接口文档的说明去检查这个3个点是否满足接口需求文档,4.有些如果要检查数据库的,就连接数据库获取数据与返回的数据做对比。
如果不满足就是有问题,如果满足则通过,如果有Bug我们会先大概分析下,是什么原因,
并进行复测,如果还是有问题,提交Bug给开发,让开发修复,之后再回归测试
9.10 什么是api接口测试
接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点测试的重点,
是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等
9.11 什么情况下开展接口测试?
1、项目处于开发阶段
2、有接口需求文档,开发已完成联调,功能测试展开之前
3、专项测试:参数约束测试,业务场景测试,测试接口请求响应时间(性能)
4、版本上线前,进行整体回归测试,查看接口是否有异常(如404等)
9.12 依赖于第三方的接口如何测试
1,需要第三方接口的,接口文档
2,发送请求到第三方接口,检查第三方接口返回的数据是否正确
3,不正确的时候,要跟第三方接口联调,看是请求问题,还是第三方接口返回数据有误,
这个我们公司的第三方接口,我们都是打通的,比如电商,我们通过调用微信接口等等,都是打通的,比如要测试下单第三支付,我们自己开店,收款设置我们自己的账号,然后通过商品设计1分钱,去测试的。
如果不打通的话,基本也只能抓包,主要保证我们发送出去的数据符合需求文档就行,然后真正的上线之前,我们会在预生产环境做一个联调测试,把各自系统连在一起,做一个联调测试没有问题了
我们就可以上线,基本就这么做的
联调测试怎么做的:
其实联调测试就是数据拉通测试,两个子系统,连在一起,形成一个完整的系统,然后从上游下数据,下游接到数据看传过来的数据是否符合下游的系统要求然后下游做了操作,把数据返回给上游,通知上游说数据返回了,上游看返回的数据是否符合要求,如果没有问题,就这个数据就拉通成功这个都是按照用例来执行,上游和下游一起出一份用例,两边都评审通过,然后按照测试用例执行,每条用例测试通过那么联调测就完成了。
9.13 你们接口怎么鉴权的?
(1)通过用户和密码,auth鉴权
(2)通过 cookie和 session
(3)通过 token
(4)通过sign签名
现在app一般是通过 token鉴权,有些是通过把 token放在请求头里面,有些是通过 singn签名这个字段放在body里面去鉴权的,一般的web是通过 session去鉴权的
9.14 接口传输格式有哪些
常见的媒体格式类型如下:
text/html:HTML格式
text/plain:纯文本格式
text/xm:XML格式
Image/gif:gif图片格式
mage/jpeg:jpg图片格式
Image/ng:png图片格式
以 application开头的媒体格式类型
application/xhtm + xml: XHTML格式
application/ml:XML数据格式
application/atom + xml: Atom XML聚合格式
application/json:JsoN数据格式
application/pdf:pdf格式
application/msword:Word文档格式
application/octet-stream:二进制流数据(如常见的文件下载)
application/x-www-form-urlencoded:encoded:<form encType=””>中默认的 encType,form
表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)
另外一种常见的媒体格式是上传文件之时使用的:
multipart/form-data:需要在表单中进行文件上传时,就需要使用该格式
9.15 cookie、session、token的区别
它们都是用来做鉴权的,区别的话,大概是这样的
1、现在 cookie、session一般是配合使用的用户第一次登陆时,服务器会创建一个 session
生成一个 sessionID,sessionID保存在 cookie中,然后返回到客户端,保存在浏览器中。
客户端每次发请求都会把这个值带到服务器,做一个鉴权和会话的跟踪,或者时效的验证
2、token和 cookie、session差不多,通过算法,每次验陆,会产生一串很长的随机字符串,一般是在放在返回的body里面,或者返回的头里面,他们都是服务器产生,带过来是要做验证和时效的验证的。一般在app中使用token比较多一点,Web端使用cookie、session的鉴权方式会多一点。
9.16 接口测试的工具有哪些?
Fiddler抓包工具,也可以做接口测试
Postman接口测试工具,支持接口自动化测试
wireshark支持电脑上各种协议的抓包工具,主要常见有http和tcp抓包
Soapui功能强大的接口测试工具,性能测试,接口自动化测试
java+httpclient.jar java代码实现接口自动化测试,一般需要借助单元测试框架junit和
TestNG接口自动化测试框架设计:java+httpclient+TestNG
Python + requests python代码实现接口与接口自动化测试,测试框架: unittest,pytest,
接口测试框架设计: python+ requests+ unittest+ htmlTestRunner或者python +requests+ pytest
Loadrunner接口自动化测试,接口性能测试(主要)
jmeter接口测试,接口自动化测试,接口性能测试(主要)
Swagger编写在线接口文档,在线接口测试
9.17 jmeter环境搭建
(1)安装jdk(java运行环境)
(2)安装 jmeter
9.18 接口工具 jmeter用到哪些组件,具体作用
取样器:
http请求 向服务器发htp请求
JDBC Requst 向数据库发请求
Debug Sampler 调试,看执行过程
Bean Shel取样器 把某个变量设置定位全局变量
后置处理器:
正则表达式提取器
#提取接口的响应内容或请求内容中的数据具体要提什么数据根据需求来,比如我们充值接口依赖登录接口,需要用到登录
接口的 cookie,需要提取 cookie
边界值提取器
JSON提取器
Bean Shell Post Precessor #在请求结束之后需要做的某些事情
比如转码
断言: #检验结果,验证本接口是否有问题
响应断言
Json断言
配置元件:
CSV data Set Config #读取CSV文件,txt文件
JDBC Connection Confiquration #连接数据库
Http Cookie管理器
HTTP信息头管理器
用户定义的变量
计数器
定时器:
同步定时器,主要用来设置集合点
监听器:
查看结果数
9.19 jmeter原理是什么
jmeter做接口测试其实就是模拟前端向后台发请求,它是通过线程来模拟真实用户对web服务器的访问压力。基本原理是建立一个线程池,多线程运行取样器产生大量负载,在运行过程中通过断言来验证结果的正确性,可以通过监听来记录测试结果
9.20 上传文件的接口用 JMeter怎么做
另外一种问法:有没有做过文件上传的接口,具体怎么做?
要测试上传文件的接口,在JMeter的http请求这个组件中传递请求参数的栏目中专门提供了一个用来文件上传的,在这里面需要填写几个内容,一个就是文件的路径,还有一个就会参数名称,还有就是MlME类型也就是指定要上传的文件的类型,这样就可以了。
9.21 对于POST请求,要求传递Json格式数据, JMeter怎么做
对于这个其实在 JMeter的http请求这个组件中的参数配置栏目中,第二个栏目有个消息体数据,我们把需要上传的参数组装成json格式,然后编写到 body data里面,然后,需要在http信息头管理其中,需要将数据格式设置为json格式,这个就是设置Content-Type
为 application/json:charset=utf-8,这样就可以了。
9.22 对于需要加密的请求参数, JMeter如何处理?
这里首先让开发给我们写一个加密,解密的jar, JMeter直接调用这个jar进行加密,解密处理
1、首先需要将开发给到的加解密的jar包文件放到 jmeter的lib/ext目录下
2、在测试计划中中有一个 add Directory or jar to classpath,在这里指定jar的路径,添加需要的jar包
3、在jmeter的前置处理器中添加 Beanshell PreProcessor然后在其中添加java代码
具体就是:
a.首先导入需要用到的加密包中的加密算法类,
b.如果要对json格式的请求参数加密,组装json格式的数据
c.调用加密类中的函数对json格式的参数数据进行加密,如果只对具体某个参数加密,
那就针对哪个参数加密即可。
d.然后将加密之后的数据保存到 jmeter的一个变量中就可以了
4、最后直接在消息体中引用这个变量就可以了
具体代码如下:
Jmeter调用
mport com changfu EncryptAnd Decryptinterface; #导入加密类
String json_str =
"{\"Username\":\"amycheno2\",\"password\":\"F59BD65F7EDAFB087A81D4DC
AO6c4910\",\"deviceNo\",\"35584806988942\")"; #请求的参数
调用加密类中的函数对请求参数实现加密处理。
String enpost= EncryptAndDecryptinterface.getEncryptPost(json_str); #将请求参数加密
vars put("enpost",enpost); #将加密处理后的数据存到 jmeter变量中
9.23 如果接口返回的数据做了加密处理的,如何进行断言?
这里可以采用 Beanshell断言
1、首先得让开发写一个解密的jar包,然后把jar包放入到 JMeter的 JMeter的lib/ext目录下
2、然后在测试计划中有一个 add Directory or jar to classpath在这里指定jar的路径添加需要的jar包
3、在 JMeter中添加 Beanshell断言,里面实现java代码,具体过程就是
a.导入解密的jar包中的解密算法类
b.导入用于解释json格式数据的类(假设返回的数据是json格式的)
c.对数据进行处理器,首先获取接口的返回数据,然后调用解密算法类中的函数进行解密,解密出来后就是一个json格式数据
d.然后调用json库中的函数对json数据进行解释,提取其中需要断言的字段,判断与预期结果是否一致就可以了
具体代码:
1、在http请求-→>添加-→>断言-→>bean shell断言
//导入jar包的 EncryptAndDecryptinterface类
import com changfu EncryptAnd DecryptInterface;
//导入jar包用于解释json格式数据的类
import org.json.JSONObject;
//对数据进行处理器
String json_res= prev.getResponse DataAsString();/取上个响应信息
String resb= EncryptAndDecryptlnterface.getDecrypt(json_res);∥调用解密工具解密
vars.put("resb",resb);
log.info("解密后的响应信息json="+resb);
JSONObject resbonseJson= new JSONObject(resb); //解析 json
String status_str= resbonseJson.get("status") toString();//截取status字段值
vars.put("status_str",status_str);
log.info("执行状态="+ status_str);
String result="0";
vars.put("result_str",result);
if(!status_str.equals(result))
{ //响应信息的状态值 status_str不等于0,则断言其他与实际值不一致
Failure=true;
FailureMessage="statuscode与实际值不一致;
实际值为:"+status_str+",响应信息:"+resb;}
9.24 下一个接口用到上一个接口的数据,但返回的数据加密了,如何提取?
比如:一次登录后做多个接口的操作,
然后登录后的uid需要关联传递给其他接口发送请求的时候使用
1、首先得让开发写一个加解密的jar包,然后把jar包放入到 jmeter的 jmeter的lib/ext目录下
2、然后在测试计划中中有一个 add Directory or jar to classpath在这里指定jar的路径,
添加需要的jar包
3、然后在第一个接口中添加一个 bean shell postprocessor(后置处理器),在后置处理器
中编写java代码,具体就是:
a.导入解密的jar包中的解密算法类
b.导入用于解释json格式数据的类(假设返回的数据是json格式的)
c.对数据进行处理器
首先获取接口的返回数据,然后调用解密算法类中的函数进行解密,解密出来后就是一个json格式数据
d.然后调用json库中的函数对json数据进行解释,提取截取响应信息中uid的值
e.将 uid_str数据存到变量中,这里用 props.put,其他线程组可调用请该变量
具体代码:
mport com.changfu.EncryptAndDecryptInterface;
import org.json.JSONArray,
import org.json.JSONObject;
string json_res = prev.getResponseDataAsString();//获取登录请求的响应信息
String resb = EncryptAndDecryptInterface.getDecrypt(json_res);//调用解密工具解密,对响应信息解密
vars.put("resb",resb);
log.info("解密后的响应信息resb="+resb);
JSONObject data_obj= new JSONObject(resb); ∥解析json响应信息
String uid_str = data_obj.get("result").get("id").toString()://截取响应信息中uid的值
props.put("uid str".uid_str); ∥将uid_str数据存到变量中,这里用props.put,其他线
程组可调用请该变量
log.info("加密前的uid="+uid_str);
4、在下一个接口中添加一个用户参数,引用上面保存的 uid_str变量
5、然后在下一个接口中添加一个 BeanShell PreProcessor(前置处理器),在其中编写
java代码
具体就是:
a.导入解密的jar包中的加密算法类
b.获取登录传递的 uid_str变量
c.调用加密算法中的加密函数对登录返回的uid进行加密处理
d.然后把加密后的数据保存到一个jmeter变量中
具体代码:
import com changfu.EncryptAndDecryptInte;
String uid_str= props.get("uid_str"); //获取登录传递的uid_str变量
String enuid=EncryptAndDecryptlnterface.getEncryptUID(uid_str)//加密登录返回的uid
Vars.put("enuid",enuid);
log.info("加密登录后返回的uid"+enid);
6、最后在下一个接口的参数中引用这个变量就可以了
9.25 jmeter如何去做get请求接口
1、把请求参数填入URL或者把参数填入到 parameter中
9.26 meter如何做json数据格式的接口
1、把参数编写到 body data里面,用json格式编写
2、在 headers头里面,定义数据格式为json格式
Content-Type application/json;charset=utf-8
9.27 jmeter中 cookies如何添加
添加http cookies管理器
9.28 jmeter中如何添加 header信息
添加http header管理器
9.29 jmeter中 webserver中soap协议xml格式数据如何测试
1,数据格式编写在 body data里面用xml数据格式保存
2,http header里面数据格式为xml
Content-Type application/soap+xml;charset=utf-8
9.30 jmeter 中如何去连接数据库
1,测试计划中导入mysq-connecti的jar包
2,配置元件中添加 jdbc-connection连接,配置连接参数
3,取样器中添加 jdbc-request
9.31 jmeter中https证书如何处理
jmeter-option中-ssl证书管理器中导入证书
9.32 http如何进行代理录制接口
首先在 jmeter中有一个非测试计划,添加一个http代理服务器,代理服务器的端口设置为8888,当然也可以选择一个没有使用过的端口就可以了,然后启动http代理服务器然后对于要录制web端的接口需要在浏览器设置代理就可以录制,默认ip为 localhost端口8888
对于要录制手机端的接口
1.保证手机与电脑在同一个网络
2.设置手机端代理
默认ip为pc机器的ip地址,端口8888
9.33 jmeter如何做post请求格式接口
参数填入到 parameter中
9.34 如何搭建 python+ requests接口测试环境
1,安装 pycharm
2,安装 python运行环境
3,安全 requests包
4,pycharm中导入 requests包
9.35 requests如果做get请求,数据保存格式哪二种
1,保存在ur里面键值对方式发送请求
2,保存在参数 params里面
9.36 requests如何做post请求接口
定义URL,定义data数据,参数用字典格式保存
#表单格式数据请求
import requests
#方维的注册接口
url = "http://47.95.118.117/fanwe/indexphp?ctl=user&act=doregister"
data={‘user name’:’cxy0o3’,
‘mobile’:’18312345676’,
‘user_pwd’:’cxy1234561’,
‘user_pwd confirm’:'cxy123456',
‘agreement’:’1’,
‘commit’:’注册’}
r=requests.post(url=url,data= data)
print(r.text)
9.37 requests上传文件接口如何测试
url="http://106.12.126.197/fanwe/file.php"
data={
"upload_type":"0",
"localUrl":"E: \\fanwe.png",
"m":"File",
"a":"do_upload}
#文件上传功能,files参数编写
files={"imgFile":(‘fanwe.png’, open(‘E:\\fanwe.png’,’rb’),image/png)}
#fes={‘文件参数的名称’:(文件名 open(E:\\fanwe.png:读的属性)文件的类型}
r=erequests.post(url=url,data=data,cookies=login(),files=files)
print (r.text,type(r.text))
9.38 有没有做过https接口,具体怎么做
https请求时在http请求中多了ssl证书,对于https请求的接口,
Requests可以为HTTPS请求验证SSL证书,就像web浏览器一样。要想检查某个主机的
SSL证书,你可以使用veiy参数
处理办法:
1、设置 verify= False,requests请求忽略证书的校验,会有警告,提示
r=requests.get(https://www.baidu.com’,verify=false)
print (r.text)
2、在 verify中设置证书的路径
requests.get(https://github.com’,verify=’/path/to/证书名字’)
3、 verify默认值为true,也可以指定一个本地证书用作客户端证书,可以是单个文件(包含密钥和证书)或一个包含两个文件路径的元组:
requests.get(‘https://kennethreitz.com',cert=(‘/path/server.crt',/path/key))
9.39 requests中如何测试json数据的接口
定义参数json
#json格式数据请求
import requests
Requests可以为 Https请求验证SSL证书,就像web浏览器一样。要想检查某个主机的ssl证书,你可以使用verify参数
处理办法:
1,设置 verify= False,requests请求忽略证书的校验,会有警告,提示
r=requests.get("https:/www.baidu.com",verify=False)
print(r.text)
2,在verify中设置证书的路径
Requests.get(https:// github.com; verify=/atho/证书名字)
3,very默认值为true,也可以指定一个本地证书用作客户端证书,可以是单个文件(包含密钥和证书)或一个包含两个文件路径的元组
requests.get(‘https://kennethreitz.com’,cert=(‘/path/server.crt',’/path/key’))
注册接口
import requests
Url="http://localhost:8000/register"
json={
"username":"Cxy002"
"Password":"12345"
}
r=requests.post(url=url,json=json)
print (r.text)
9.40 requests中如何添加 cookies
定义参数为 cookies,用字典保存
在请求过程中添加 cookies值
requests.post(url=url,data=data,headers=headers,cookies=cookies)
9.41 requests中如何添加 headers信息
定义参数为 headers,用字典保存
在请求过程中添加 headers值
requests.post(urlurl,data= data,headers=headers,cookies=cookies)
9.42 requests中https证书如何处理
https请求时在http请求中多了ssl证书,对于https请求的接口
9.43 requests中sign签名与 token如何处理
Token值
token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。
当用户第一次登录后,服务器生成一个 token并将此 token返回给客户端,以后客户端只需带上这个 token前来请求数据即可,无需再次带上用户名和密码。
简单 token的组成;uid(用户唯一的身份标识、time当前时间的时间戳、sign(签名,token的前几位以哈希算法压缩成的一定长度的十六进制字符串。为防止 token泄露)
import requests
import re
url='http://loclhost:8000/login'
Data={
'Username':'cxy002'
'Password':'123456'
}
r=requests.post(url=url,data= data)
print (r.text,type(r.text))
rk=re.findall("token":"(.*?)","r.text")
print(rk)
url="http://localhost:8000/recharge"
data=(
money:10000
Serial_number: 22222
token: rk
p=requests. post(url=url, data= data)
print(p.text)
sign签名:也是一种安全校验
sign的处理一个案例
post请求htps://{url地址}/ index.php/Platen/Card/active
参数:
Hotel_store_id=0123456&
Pack_id=4&
phone=175861263288&
sign=5dc6331b07fc097d013410353740f8e8168c499a
签名算法:
1.将发送数据按照参数名ASCLL码从小到大排序(字典序),使用URL键值对的格式(如
key= value1&key2=vaue2...),得到str,注意:sign不参与签名。
2.在str后面拼接"&key= YpLdvl2L3Rc5yYX"其中 YpLdvl2L3Rc5yYX为加密密钥
3.对字符串str进行sha1运算,得到签名sign
def test_xielv():
url="https://{url地址}/index.php/Platen/Card/active"
Json_v={
"Hotel_store_id":"0123456"
"pack_id":"4"
"phone":"18319011906"
}
#字典添加新的key
Json_v["sign"]=sign_01(json_v)
# print (json_v)打印发送请求的json值
r=requests.post(url=url,json=json_v)
print (r.content.decode("unicode_escape"))
assert'{"code:1002msg:"ID错误或找不到
data": "")==rcontent. decodeCunicode escape")
9.44 request框架有哪些方法?
像用来发送请求的一般都是调用以下方法
reponse=requests.get()
reponse=requests.post()
获取响应数据一般都是调用以下方法
reponse.status_code
reponse.reason
reponse.text
reponse.json()
reponse.headers
reponse.cookies
将近几千道题+答案,太多了这里就展示了其中的一部分如果大家有需要的话可以点击文章末尾的小卡片备注000领取哈
总结:下方是作者花费三个月打造的软件测试道测试开发全职业生涯资料包,有需要的话可以点击文章末尾的小卡片备注000领取哈