接口测试3-参数关联接口(从上一个接口中获取数据,访问幼儿园服务器接口无session)

一。视频举例:模拟输入用户名密码登录网站接口(有session)

1.通过fiddler抓包找到传递参数,其中usersession值每次都不一样,原因是:当我们访问网页时调用接口时,服务器会响应一个数据,接下来登录时,会从上一个接口的相应数据里面把值取出来作为登录的参数传递过去,所以单独请求无法成功。

如果这个接口中包含上一个接口的响应数据,我们就需要做一个参数的关联

这个数据是每次打开网站的时候都会发一个值过来。

所以下面的请求是错误的

-------题外话

Cookie与Session的区别

session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

  1. cookie数据存放在客户的浏览器上,session数据放在服务器上;
  2. cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session;
  3. session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用COOKIE;
  4. 单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能超过3K;

如果你对网页有交互,服务器如何在众多请求中能识别你那是曾经的哪一个?这依赖于你传递上来的cookie,即合没有任何其他的的交互,在你浏览器进程中也必须保存诸如sessionID之类的cookie!但这个是临时的,只是为了识别你到底是谁而已。知道了你是谁,服务器还需要知道该怎么做,那么在服务器进程中必须存在一个sessionID,这个与你请求的相对应,然后根据这个才知道你是谁,该怎么做。比如加入购物车之类的 要知道你是哪个用户

如果你想做bai简单一点。那就用session。一行代码就du可以保存管理员的登陆状态zhi,在session有效的时间dao内。再次访问页面不需要重新登陆。
但是,这个有一个弊端。就是现在的web编程思想:轻服务器端,重客户端。也就是尽量减轻服务器端的压力(少在服务器端存储数据,等等)。应该尽可能的将一些可以放在客户端的数据,放在客户端。而且,有一些很注重性能的架构师,以asp.net为例。他会直接禁用掉所有session(因为他们理解session如果用作保存数据,cookie可以替代,如果用作传递数据,隐藏域可以替代,所以session完全没有必要),如果你遇到这样的架构师,那么session肯定是行不通的。只能用cookie。
如果你要用cookie去实现。就需要做两件事
对cookie进行加密
将cookie存储在本地,并且不随着浏览器的关闭而删除

2.改写,加入参数关联,比较重要

-------------------------------------------

# 导包
import requests
import re
#第一个接口地址
url2 = "http://192.168.103.106:1080/webtours/nav.pl?in=home"
s = requests.session()# 为了保持和下一个接口建立相同的连接通道
res = s.get(url2)#拿s这个变量去发送上一个接口地址
# print(res.text)#得到响应文本内容
usersession = re.findall(r'name=userSession value=(.+?)>',res.text)#要在上一个文本内容里去匹配这条数据把数据取出来。这里通过re.findall正则的方式去匹配,匹配成功后将.+?放到usersession这个变量中,这个变量是个列表
print(usersession)
# para2 ={"in":"home"}
# 第二个接口地址 登录接口
url ="http://192.168.103.106:1080/webtours/login.pl"
para ={"userSession":usersession[0],"username":"jojo","password":"bean","login.x":"54","login.y":"11","login":"Login","JSFormSubmit":"off"}#从上一个接口的响应数据中取出,放在这里,取第一个【0】,其他数据不变
r = s.post(url,data=para)
# 发送post请求
# r = requests.post(url,data=para)#拿一个变量接受响应结果,打印出来
print(r.text)
----------------------------------

二。本地访问幼儿园服务器接口测试:(没有session)

1.需求:本机电脑访问https://children.avatarmind.com/avatar/login输入用户名密码登录接口测试

2.抓包:

(如果要抓取手机端APP访问服务器的包需要笔记本设置代理,并且和手机在一个网段,在笔记本上安装抓包工具获取接口数据)

安装fiddler,后进行过滤,垃圾信息太多,只需要指定服务器的数据,设置如下:

 

 

 3.开始调试代码

(1)第一次我编写代码后python执行后报错SSL:

requests.exceptions.SSLError: HTTPSConnectionPool(host='children.avatarmind.com', port=443): Max retries exceeded with url: /avatar/login (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)'),))

 

----解决方法:

【解决方案】

有些网页,一开始用脚本语言(python)去访问的时候会遇到这样问题。
一般这样的网站用浏览器去访问的时候,会弹出这样的警告“您的链接不是私密链接”。

简单解释

这里是由于这个网页的证书没有被官方CA机构信任,所以这里会出现证书验证的错误。
这样的url典型有https://www.12306.cn

如下使用代码的时候,就会出现这样的问题。

import requests
r = requests.get('https://www.12306.cn')
print(r.status_code)
所以最终改成:

-----------------------------------------

import requests
import logging
logging.captureWarnings(True)
url = "https://children.avatarmind.com/avatar/login" #先查看fiddler中webforms中有参数值的,找到对应的请求后,然后点击左侧的列表右击“copy”“just url”
para = {"username":"115","password":"123456","verifyCode":"9683"}
r = requests.post(url,data=para,verify=False)
print(r)
-----------------------------------------


原文地址:https://www.cnblogs.com/yinlili/p/13153709.html