面经-软件测试面试常见面试题全套合集系列4-2

目录

六、 Linux

6.1  Linux系统你是怎么用的?

6.2  Linux是什么工具连接的, Linux版本是多少

6.3 日志具体是怎么看的

6.4 监控资源命令用到哪些

6.5  nmon工具是如何使用的

6.6 测试环境是如何搭建的(弱项)

6.7  linux常见命令有哪些,说出10条左右

6.8 如何查看端口是否被占用

6.9  data目录下找到所有txt的文件的命令

6.10 怎么把lnux服务器的文件拷贝到另外一台 linux服务器

七、数据库

7.1 你们数据库怎么用

7.2 存储过程是怎么编写的

7.3 常见的关系型数据库有哪些

7.4 你们用的什么数据库连接工具

7.5 左连接与右连接有什么区别

7.6 索引有哪些,如何建立索引,素引的优缺点

7.7  having是干嘛的?

7.8  where与 having的区别?

7.9 查询数据库的前100行数据,你sq怎么写

7.10 如何进行多表查询

7.11  in与 exist的区别

7.12 数据库测试有没有发现什么问题

八、抓包与网络协议

8.1 抓包工具怎么用

8.2  如何抓取https的包

8.3 如何抓取手机的包

8.4 网络协议了解多少?

8.5 请求方式有哪些?

8.6  get跟post请求的区别

8.7  http跟https的区别

8.8  为什么要使用cookie和session:http是无状态协议

8.9  cookie跟 session的区别

8.10  OSI七层网络模型 

8.11  TCP模型

8.12   TCP和UDP的区别?

8.13  tcp的三次握手是怎么实现的?

8.14  http协议包含哪些内容

8.15  http状态码有哪些

8.16  post申请方式,用get会报什么错误。

8.17  http协议提交请求头内容

九、接口测试

9.1 接口测试怎么测

9.2  两个接口有关联, jmeter具体怎么做

9.3 接口测试主要目的是什么?

9.4  接口测试的流程

9.5  接口测试和平常的Ul测试有什么区别?

9.6  给你一个新的接口,你怎么去设计用例?

9.7  接口文档主要包含哪些内容?

9.8  你们什么时候测试接口

9.9  你怎么去检查,分析

9.10  什么是api接口测试

9.11  什么情况下开展接口测试?

9.12  依赖于第三方的接口如何测试

9.13  你们接口怎么鉴权的?

9.14  接口传输格式有哪些

9.15   cookie、session、token的区别

9.16  接口测试的工具有哪些?

9.17  jmeter环境搭建

9.18  接口工具 jmeter用到哪些组件,具体作用

9.19  jmeter原理是什么

9.20  上传文件的接口用 JMeter怎么做

9.21  对于POST请求,要求传递Json格式数据, JMeter怎么做

9.22  对于需要加密的请求参数, JMeter如何处理?

9.23  如果接口返回的数据做了加密处理的,如何进行断言?

9.24 下一个接口用到上一个接口的数据,但返回的数据加密了,如何提取?

9.25  jmeter如何去做get请求接口

9.26  meter如何做json数据格式的接口

9.27  jmeter中 cookies如何添加

9.28  jmeter中如何添加 header信息

9.29  jmeter中 webserver中soap协议xml格式数据如何测试

9.30  jmeter 中如何去连接数据库

9.31  jmeter中https证书如何处理

9.32  http如何进行代理录制接口

9.33  jmeter如何做post请求格式接口

9.34  如何搭建 python+ requests接口测试环境

9.35  requests如果做get请求,数据保存格式哪二种

9.36  requests如何做post请求接口

9.37  requests上传文件接口如何测试

9.38 有没有做过https接口,具体怎么做

9.39  requests中如何测试json数据的接口

9.40  requests中如何添加 cookies

9.41  requests中如何添加 headers信息

9.42  requests中https证书如何处理

9.43  requests中sign签名与 token如何处理

9.44  request框架有哪些方法?


 

前言

继上次的面经,这里是第二阶段的,不说看完百分比能过面试,基本上的是没有问题的铁汁们。

Python自动化测试全栈+性能测试全栈+全套资料免费领取

六、 Linux

6.1  Linux系统你是怎么用的?

[在测试1、执行的过程中,我们发现的bug,有时候需要定位bug,协助开发修复bug时需要在linux里通过命令tail-200或tail-500查看当天的日志的后面多少行或者前面多少行定位bug或者通过tail -f来查看日志里的关键字 exception(异常) error(错误)。

[后台程序运行久了会对系统造成卡顿等诸多隐患或我们做性能测试的时候我们都会通过linux的命令Ps -ef显示所有进程)、top(监控程序执行状况)、free -m显示内存使用情况)

来查看系统资源如果服务器出现故障时我们也会用(service httpd status)看下服务器是否启动,用ps -ef|grep httpd查看apache进程是否启动,用ps -ef|grepjava查看jdk进程是否启动如果服务器起不来,常见的问题有端口可能被占用,用 netstat- an|grep 8080查看端口是否已被占用。]

[搭建测试环境的时候我们在是在linux下进行的,搭建LAMP时在线用命令 yum install

安装 apache,php以及mysql;或通过 xshell来导入需要的环境包来搭建LTMJ(Tomcat、Mysql、jdk)

6.2  Linux是什么工具连接的, Linux版本是多少

Xshell、CRT、SSH用的ssh协议连接,端口是22

传输文件用xftp工具,占用的端口是21

Linux版本 centos6.5版本64位

6.3 日志具体是怎么看的

1、我们根据日志目录找到对应的日志文件,用tail -200,或者tail-500查看文件内容

也可以重定向导出来查看。

如果是系统出现了异常导致的错误,我们跟去查找关键字,比如说error或者 exception等

如果是逻辑错误,会把操作对应时间的日志跟对应开发一起去定位bug

6.4 监控资源命令用到哪些

查着进程ps -ef过滤添加grep来着

杀掉进程 kill 强制杀掉 -9

监控资源top  vmstat

磁盘 df -h

内存 free -m

6.5  nmon工具是如何使用的

1、下载安装包()

2、安装(不需要安装-解压即可) nmon_linux_14i.tar.gz

1)把文件传输到 linux服务器

2)解压xftp

tar -zxvf nmon_linux 14i.tar.gz

3)解压文件中,找到你系统版本对应的运行文件

比如:你们的操作系统 centos6.5  64位系统, ./nmon_x86_64_centos6文件

4)运行对应的监控资源的文件

./nmon_x86_64_centos6

按字母c查看cpu,m查看内存,n查看网络,q退出

3、运行命令把数据保存到文档中

./nmon_x86_64_sles11 -s1 -c350 -f -m /home/

-s1每1秒采集一次数据

-c350采集350次,即为采集十分钟的数据。

-f生成的数据文件名中包含文件创建的时间

-m生成的数据文件的存放目录

这样就会生成一个nmon文件,并每十秒更新一次,直到分钟后。

生成的文件名如:_090824_1306nmon,””是这台主机的主机名, nmon -h查看更多帮助信息。

4、把生成nmon工具,导出到 windows

5、用 office运行分析工具

6、生成一个xlsx文件

6.6 测试环境是如何搭建的(弱项)

前提条件:租服务器或者买服务器-仅搭建一次,

1、搭建环境 linux+ apache+php+ mysql, linux+ tomcat+java+ mysql

2、每一次选代,每一次测试( apache)html目录下

1)替换代码包(覆盖代码包)-配置文件已经编辑好-压缩包

2)运行sql文件

3)重启服务

tomcat(java语言) ---代码在 webapps目录下

1,替换代码包(覆盖代码包)·配置文件已经编辑好-压缩包,war包(重启 tomcat服务,自动化解压)

2,运行SQL文件

3,重启服务

6.7  linux常见命令有哪些,说出10条左右

查看实时日志:tall  、 head -20 查看前20行 、 tail -20 查看前20行

查看进程:ps -ef 、查看当前系统端口:netstat -an 、查看哪些端口被打开:netstat -anp

重启数据库服务:systemctl restart mysql service

重启网卡:service network restart

解压包:.zip包  unzip 包名    .tar  tar -xzf  包名

在线安装用 yun

6.8 如何查看端口是否被占用

Netstat -anolgrep 8080

6.9  data目录下找到所有txt的文件的命令

Find /data -name “*.txt”

6.10 怎么把lnux服务器的文件拷贝到另外一台 linux服务器

scp要拷贝的文件目标主机ip:/目录/

scp startup.sh 192.168.1.157: /home/

[email protected]'s password:

startup.sh

Python自动化测试全栈+性能测试全栈+全套资料免费领取Python自动化测试全栈+性能测试全栈,全套资料-功能-接口-自动化-性能-测试开发-面试全套资料全套资料https://mp.weixin.qq.com/s?__biz=Mzg4OTc5MjkwNQ==&mid=2247483688&idx=1&sn=87bfa6123b04df611c8afae666007ebf&chksm=cfe731cef890b8d8fee9860fe95784ff81d728d7e385e04bd8fd8b28e4774dea577aea051b09¬replace=true#rd

七、数据库

7.1 你们数据库怎么用

[原来我们数据库用的比较多的,就是数据结果检查,测试一些数据准备,性能测试造大量数据。]

[测试执行到的结果,我们需要通过sql语句 select来查找数据库对应的表,看看数据库信息跟我们执行的结果是否一致,比如:生成申请借款后,我们会去数据库里面去检查下,数据库中数据是否跟申请订单数据一致。]

[我们在测试执行时需要做一些测试数据准备,我们就用 insert into输入数据或(者update set修改数据),我们需要到数据库查看有没有相关记录保存,保存的数据跟我们输入或者修改的记录是否一致;比如:原来我们一个初审功能里面有个分页功能,测试分页功能,需要100条数据,我们就通过数据库操作添加100,可以用 insert into。也可以用脚本实现,或者存储过程]

[还有在做性能测试时,模拟用户场景时需要用到大量的数据,这时就需要我们到数据库中制造大量的数据出来。比如说,测试充值,需要大量用户数据,充值表中大量数据,比如10W条数据,我们就用存储过程去造。]

7.2 存储过程是怎么编写的

delimiter∥

create procedure存储过程名(n int)

BEGIN

declare i int default 0;

while i <= n do

Insert into表名 values(值1,值2...)

set i=i+1;

end while;

end∥

delimiter;

cal存储过程名(数据量(n));

7.3 常见的关系型数据库有哪些

mysql、SQL Server、Oracle、Sybase、DB2等

MySQL是开源免费的;

SQL Server是由微软公司开发的关系型数据库管理系统,一般用于Web上存储数据;

Oracle数据的大量性数据的保存的持久性;

7.4 你们用的什么数据库连接工具

Navicat,数据库版本 mysql 5.6,端口默认是3306

7.5 左连接与右连接有什么区别

左连接:以左边的表(employ)为主,显示左边表列的全部数据,如果右边表没有对应的数据,

则为NULL

右连接:以右边的表(student)为主,显示右边表列的全部数据,如果左边表没有对应的数据,

则为NULL

7.6 索引有哪些,如何建立索引,素引的优缺点

MySQL索引的建立对手 MySQL的高效行是很重要的,索引可以大大提高MySQL的检素速度

缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行 INSERT、

UPDATE和 DELETE,因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件,建立索引会占用磁盘空间的索引文件。

索引份分单列索引和组合索引,单列索引,即一个索引只包含单个列,一个表可以有多个单列素引,但这不是组合素引,组合索引,即一个索引包含多个列。

主键索引 PRIMARY KEY,唯一索引 UNIQUE,普通素引 INDEX

组合索引INDEX,全文索引 FULLTEXT

7.7  having是干嘛的?

是一个条件查询,一般是跟着分组以后,比如

select title, count(title) as t from titles group by title having t>=2;

7.8  where与 having的区别?

having是在分组对数据进行过滤

where是在分组对数据进行过滤

having后面可以使用聚合函数

where后面不可以使用聚合

7.9 查询数据库的前100行数据,你sq怎么写

Select * from user limit 0,100

7.10 如何进行多表查询

Select * from A,b where a,id=b,id

7.11  in与 exist的区别

1.in()适合B表比A表数据的情况

2.exists()适合B表比A表数据的情况

7.12 数据库测试有没有发现什么问题

原来我们做的一个功能,生成订单,在数据库中没有添加创建时间,导致后续根据时间点,去查询订单的时候,找到对应的数据

八、抓包与网络协议

8.1 抓包工具怎么用

我原来的公司对于抓包这块,在App的测试用得比较多。我们会使用fiddler抓取数据检查结果,定位问题,测试安全,制造弱网环境;

如:抓取数据通过查看请求数据,请求行,请求报头,请求正文,信息是否正确去检查结果,

如果是以4开头的话就有可能是前端问题一般我会到前端排查,以5开头就有可能是后端

问题我就会到后端排查;如果是200的话,就需要检查请求行,请求报头,请求正文是否正确,

如果请求错误就是前端问题,如果请求没有问题,那就是后端问题,看后端问题服务器运行日志,

是否包含 exception,error或根据时间点去看日志。

测试安全,抓取数据查看用户的感敏信息有没有进行加密显示,还有就是把发送请求的数据篡改是否成功。

弱网环境,诵过 fiddler工具选择 Customize Ruels...(Ctr+R)调出定义脚本编辑器找到

“if (m_SimulateModem)”设置上行下行网速,然后把

Rules-> Performance-> Simulate Modem Speeds选中生效

常用抓包工具有:浏览器中F12, fiddler, Charles(青花瓷), wireshark

8.2  如何抓取https的包

1、设置 Tools=> Option=>勾选 Decrypt Https traffic=>勾选 lgnore server

certificate errors(unsafe)

2、打开https网页就可以成功抓取了

3、还可以 Fiddler添加过滤器(Filters):只抓取指定iP的数据

8.3 如何抓取手机的包

1、开启 Fiddler的远程连接

Fiddler主菜单Toos- Options-> Connections>勾选 Allow remote computers to

2、重启 Fiddler,更新刚开启的远程配置

3、然后手机和电脑需要在同一个局域网,抓取http手机设置代理就可以,要抓取https包,手机需要安装一个fiddler证书

1、fder工具生成一个证书,发送手机上面安装

2、通过手机浏览器打开安装证书界面192.168.3.197:8888

ip地址是用 fiddler工具的电脑的ip地址,fiddler工具端口号的8888

3、点击下载证书,会提示,输入手机锁屏密码

4、给证书命名,名字随意,其他默认就ok

5、点击确定,安装成功,然后就可以抓取https的包了

8.4 网络协议了解多少?

原来我们用得比较多的协议是http和https以及tcp协议

http和https都是超文本协议,浏览器发送数据请求基本用的都是他们,不同的是https

在http的基础上增加了ssl加密协议,http的默认端口是80,http:的默认端口是443,

https收费,http免费。

tcp协议的话,作用在传输层,在发送请求前会有三次握手,是面向连接的协议,传输过程比较可靠

udp协议的话,作用在传输层,面向非连接协议,传输过程相对tcp不可靠,传输大量数据

 Python自动化测试全栈+性能测试全栈+全套资料免费领取Python自动化测试全栈+性能测试全栈,全套资料-功能-接口-自动化-性能-测试开发-面试全套资料全套资料https://mp.weixin.qq.com/s?__biz=Mzg4OTc5MjkwNQ==&mid=2247483688&idx=1&sn=87bfa6123b04df611c8afae666007ebf&chksm=cfe731cef890b8d8fee9860fe95784ff81d728d7e385e04bd8fd8b28e4774dea577aea051b09¬replace=true#rd

8.5 请求方式有哪些?

常用:get、post

不常用:delete、put、head、option

8.6  get跟post请求的区别

1)get请求的参数有长度限制,post没有

2)get请求参数在url上传输,post的参数在请求正文中传输。post比get传输更安全

3)get只能接收ascall码参数,而post没有限制

4)get请求的时候,只请求一次,而post请求两次,第一发送请求头相关信息,第二次

再发送请求正文,(只有部分浏览器2次请求)

8.7  http跟https的区别

1.https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用

2.http是超文本传输协议,信息是明文传输https则是具有安全性的ssl加密传输协议

3.http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443

4.http的连接很简单,是无状态的;Https协议是由SSL + HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

8.8  为什么要使用cookie和session:http是无状态协议

第一次登录,发送用户信息给到服务器,服务器把用户信息保存在session中服务器响应数据给客户端,响应数据中有包含session的先关用户信息

客户端接收到服务器session信息,把session中相关的用户信息保存在cookie中

第二次登录,客户端发送请求,并携带cookie,服务端可以直接验证cookie值,如果用户已经登录过,可以免登录

8.9  cookie跟 session的区别

在网站中http请求是无状态的,也就是说即使第一次和服务器连接后并且登录成功后,

第二次请求服务器依然不能知道当前请求是哪个用户,cookie的出现就是为了解决这个问题,

第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的 cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB,因此使用 cookie只能存储一些小量的数据。

session和 cookie的作用有点类似,都是为了存储用户相关的信息,不同的是,cookie是存储在本地浏览器,而session存储在服务器.存储在服务器的数据会更加的安全,不容易被窃取。但存储在服务器也有一定的弊端,就是会占用服务器的资源,但现在服务器已经发展至今,一些session信息还是绰绰有余的

8.10  OSI七层网络模型 

(1)参考模型:只是提供给生产商或者软件开发商参考的模型

(2)开发系统互联

正在上传…重新上传取消

(3)有七层

8.11  TCP模型

有四层:

应用层 (telnet.stp.htp),传输层( CP UDP)、网络层,中数据链路层

8.12   TCP和UDP的区别?

(1)TCP面向连接、而UDP面向非连接

(2)TCP相对UDP更可靠

(3)TCP应用场景,用于传输少量数据,而UDP用于传输大量数据

(4)TCP传输的数据相对UDP慢

8.13  tcp的三次握手是怎么实现的?

(1)客户端给服务器发送报文syn=1和序列号Seq=x

(2)服务器接收到客户端的请求,服务器响应syn=1,ack=x+1,seq=y

(3)客户端接收到服务器的响应,返回给服务器,ack=y+1,seq=z

8.14  http协议包含哪些内容

(1)请求信息

1)请求行:请求方式、请求地址http版本1.1

2)请求头

HTTP消息报头包括普通报头、请求报头、响应报头、实体报头

Cache- Control:no- cache 缓存

Connection:close/keep-aive 是否关闭或者保持连接

Accept-Charset:ios-859-1 字符集

Accept-Encoding:gzip.deflate 编码格式

Accept-Language:zh-cn 语言

Authorization:服务器授权验证

Host:主机

User-Agent:

Location:重定向

Server:服务器版本信息

Content-Encoding:实体报头的编码格式

请求正文

data

(2)响应信息

1)状态行:http版本、状态码、状态信息

2)响应头:跟请求头一样

3)响应正文:

8.15  http状态码有哪些

1xx需要继续发送请求

2xx成功

3xx需要重定向

4xx客户端请求数据有误

5xx服务器响应错误

6xx服务器响应错误

常见状态码:400、404、200、500、302、501、504

101服务器根据客户端的请求切换协议,只能切换到更高级的协议,

例如,切换到HTTP的新版本协议

102(代表处理将被继续执行)由 WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行

2开头这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。

200(成功)服务器已成功处理了请求,通常,这表示服务器提供了请求的网页

201(已创建)请求成功并且服务器创建了新的资源

202(已接受)服务器已接受请求,但尚未处理

203(非授权信息)服务器已成功处理了请求,但返回的信息可能来自另一来源

204(无内容)服务器成功处理了请求,但没有返回任何内容

205(重置内容)服务器成功处理了请求,但没有返回任何内容

206(部分内容)服务器成功处理了部分GET请求

207(代表之后的消息体将是一个XML消息),并且可能依照之前子请求数量的不同,包含

系列独立的响应代码

3开头(请求被重定向)表示要完成请求,需要进一步操作。通常,这些状态代码用来重定向。

300(多种选择)针对请求,服务器可执行多种操作。服务器可根据请求者(user agent)选择一项操作,或提供操作列表供请求者选择。

301(永久移动)请求的网页已永久移动到新位置.服务器返回此响应(对GET或HEAD请求的响应)时,会自动将请求者转到新位置

302(临时移动)服务器目前从不同位置的网页响应请求,

但请求者应继续使用原有位置来进行以后的请求

303(查看其他位置)请求者应当对不同的位置使用单独的GET请求来检索响应时,服务器返回此代码。

304(未修改)自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容

305(使用代理)请求者只能使用代理访问请求的网页。如果服务器返回此响应,

还表示请求者应使用代理。

307(临时重定向)服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求

4开头(请求错误)这些状态代码表示请求可能出错,妨碍了服务器的处理。

400(错误请求)服务器不理解请求的语法

401(未授权)请求要求身份验证,对于需要登录的网页,服务器可能返回此响应

403(禁止)服务器拒绝请求

404(未找到)服务器找不到请求的网页

405(方法禁用)禁用请求中指定的方法

406(不接受)无法使用请求的内容特性响应请求的网页

407(需要代理授权)此状态代码与401(未授权)类似,但指定请求者应当授权使用代理

408(请求超时)服务器等候请求时发生超时

409(冲突)服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息

410(已删除)如果请求的资源已永久删除,服务器就会返回此响应。

411(需要有效长度)服务器不接受不含有效内容长度标头字段的请求

412(未满足前提条件)服务器未满足请求者在请求中设置的其中一个前提条件

413(请求实体过大)服务器无法处理请求,因为请求实体过大,超出服务器的处理能力

414(请求的URL过长)请求的URL(通常为网址)过长,服务器无法处理

415(不支持的媒体类型)请求的格式不受请求页面的支持

416(请求范围不符合要求)如果页面无法提供请求的范围,则服务器会返回此状态代码

417(未满足期望值)服务器未满足期望请求标头字段的要求

5开头(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误

这些错误可能是服务器本身的错误,而不是请求出错

500(服务器内部错误)服务器遇到错误,无法完成请求

501(尚未实施)服务器不具备完成请求的功能,例如,服务器无法识别请求方法时可能会返回此代码。

502(错误网关)服务器作为网关或代理,从上游服务器收到无效响应,(比如:nginx里

设置了反向代理,自己代理给自己,形成了死循环,造成大量的访问日志,每秒上万)

503(服务不可用)服务器目前无法使用(由于超载或停机维护),通常,这只是暂时状态。

504(网关超时)服务器作为网关或代理,但是没有及时从上游服务器收到请求

505(HTTP版本不受支持)服务器不支持请求中所用的HTTP协议版本

8.16  post申请方式,用get会报什么错误。

404 Not Found

请求失败,请求所希望得到的资源未被在服务器上发现,没有信息能够告诉用户这个状况到底是暂时的还是永久的,假如服务器知道情况的话,应当使用410状态码来告知旧资源因为某些内部的配置机制问题,已经永久的不可用,而且没有任何可以跳转的地址,404这个状态码被广泛应用于当服务器不想揭示到底为何请求被拒绝或者没有其他适合的响应可用的情况下,出现这个错误的最有可能的原因是服务器端没有这个页面。

8.17  http协议提交请求头内容

Accept-Charset:浏览器能够显示的字符集

Accept- Encoding:浏览器能够处理的压缩编码

Accept-Language:浏览器当前设置的语言

Connection:浏览器与服务器之间连接的类型

Cookie:当前页面设置的任何 Cookie

Host:发出请求的页面所在的域

Referer:发出请求的页面的URL

User-Agent:浏览器的用户代理字符串

Content-Type:请求数据的格式或者是类型

九、接口测试

9.1 接口测试怎么测

(jmeter版本)

首先开发会给我们一个接口文档,我们根据开发给的接口文档,进行测试点的分析,主要是考虑正常场景与异常场景,正常场景,条件的组合,参数的格式校验等价边界值;异常场景,多一个参数,少个必填参数,参数为空;接着编写测试用例,用的 Jmeter工具去运行,创建线程组,建立http请求,输入测试用例,请求参数,建立察看结果树,运行,看返回的结果,是否跟接口文档里面要求的返回结果一致,其他用例,值需要修改里面的参数,请求地址这些信息。

举例说明:(不要登录跟注册)

比如说原来我们做一个申请借款的接口,对接口进行测试分析,考虑正常场景与异常场景,正常场景,考虑不同参数组合,比如说,不同借款方式,还款期限,还款曰期,借款的利率等参数组合;也要测试每个参数格式校验,异常场景,:多一个参数,少一个必填参数,比如没有借款的利率,参数为空的,比如借款标题为空,编写测试用例

在 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  jmetercookies如何添加

添加http    cookies管理器

9.28  jmeter中如何添加 header信息

添加http header管理器

9.29  jmeterwebserversoap协议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  jmeterhttps证书如何处理

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

Python自动化测试全栈+性能测试全栈+全套资料免费领取

猜你喜欢

转载自blog.csdn.net/csdnchengxi/article/details/124819938