2023备战金三银四,Python自动化软件测试面试宝典合集(七)
马上就又到了程序员们躁动不安,蠢蠢欲动的季节~这不,金三银四已然到了家门口,元宵节一过后台就有不少人问我:
现在外边大厂面试都问啥
想去大厂又怕面试挂
面试应该怎么准备
测试开发前景如何
面试,一个程序员成长之路永恒绕不过的话题。每每到这个时期,不管当前有没有跳槽换工作需求的,都多少会跟着观望一下“外边的世界”~
当然外边的世界很精彩,但出来混,可不能没有一点准备,赤手空拳上阵。给大家分享一份免费的 测试工程师面试题,涵盖不少大厂高频必考点,需要的同学可免费领取。
不只是面试,了解市场需求,认识自己的问题,熟悉Python高频难点,巩固 Python相关知识...这份资料都可以帮助到你。
金三银四刚开始就拿到了蚂蚁的offer,这份阿里大牛总结的面试笔记,能掌握这份笔记的70%以上感觉就能拿大厂offer。
为了帮助更多的粉丝朋友们都拿到心仪的offer,小编在此把这份笔记分享出来
接上篇:
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 包中的解密算法类54
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、最后在下一个接口的参数中引用这个变量就可以了
相关文章:

2023备战金三银四,Python自动化软件测试面试宝典合集(七)
马上就又到了程序员们躁动不安,蠢蠢欲动的季节~这不,金三银四已然到了家门口,元宵节一过后台就有不少人问我:现在外边大厂面试都问啥想去大厂又怕面试挂面试应该怎么准备测试开发前景如何面试,一个程序员成长之路永恒绕…...

redis 主从复制
在redis的持久化RDB与AOF详解文章中,我们知道如果redis宕机了,我们可以通过AOF 和 RDB 文件的方式恢复数据,从而保证数据的丢失(或少量损失)从而提高稳定性。但是,如果我们数据只存在一台redis服务器中&…...

如何用Redis实现延迟队列
背景前段时间有个小项目需要使用延迟任务,谈到延迟任务,我脑子第一时间一闪而过的就是使用消息队列来做,比如RabbitMQ的死信队列又或者RocketMQ的延迟队列,但是奈何这是一个小项目,并没有引入MQ,我也不太想…...

项目文件相关总结
风险登记册 风险登记册记录了已识别单个风险的详细信息。其主要内容包括: 已识别的风险清单潜在的风险责任人潜在的风险应对措施清单风险管理计划要求的其他信息供方选择标准 供方选择标准用于确保选出的建议书将提供最佳质量的所需服务,主要内容 包括: 能力和潜力产品成本…...

ZooKeeper集群搭建步骤
一、准备虚拟机准备三台虚拟机,对应ip地址和主机名如下:ip地址Hostname192.168.153.150ant163192.168.153.151ant164192.168.153.152ant165修改hostname,并使之生效[rootlocalhost /]# hostnamectl set-hostname zookeeper1 //修改hostname …...

网际协议IP
网际协议IP 文章目录网际协议IP[toc]虚拟互联网IP地址及其表示方法分类IP地址(两级)无分类编址 CIDR网路前缀地址块地址掩码子网划分(三级IP地址)IP地址和MAC地址地址解析协议ARPIP数据报的格式IP数据报首部的固定部分中的各字段IP数据报首部的可变部分分…...

Python 语言参考手册、教程、标准库
官方文档:https://docs.python.org/zh-cn/3.11/ Python 语言参考手册 介绍了 Python 句法与“核心语义”。在力求简明扼要的同时,我们也尽量做到准确、完整。有关内置对象类型、内置函数、模块的语义在 Python 标准库 中介绍。有关本语言的非正式介绍&am…...

数据库连接池 BoneCP、HikariCP 等
文章目录 数据库连接池 BoneCP、HikariCP 等BoneCPDruidTomcat Jdbc PoolHikariCPC3p0DbcpLRUPSCachePS数据库连接池 BoneCP、HikariCP 等 BoneCP 官方说法 BoneCP 是一个高效、免费、开源的 Java 数据库连接池实现库 设计初衷就是为了提高数据库连接池性能,根据某些测试数…...

博客系统 SSM 超强硬核良心推荐之第一弹 - 预备工作
硬核 ! 从 0 到 1 完美实现 SSM 版本的博客系统 , 学会保准不吃亏!一 . SSM 版本相比于 Servlet 版本的亮点二 . 初始化数据库三 . 前端页面3.1 注册页面3.2 登录功能3.3 文章总列表页3.4 自己的文章列表页3.5 文章详情页3.6 编写博客页面大家好 , 这是新的专栏 , 博客系统 SSM…...

[Web] 简单瀑布流布局实现
目前的纯 CSS 布局, 是没办法实现比较完美的瀑布流布局的. 参考: CSS总结:瀑布流布局 - 黑白程序员 我使用 JS CSS, 并且自动布局实现了较为简单, 观赏性好的瀑布流布局. 代码 HTML: <!DOCTYPE html> <html lang"en"> <head><link rel&quo…...

多线程之死锁,哲学家就餐问题的实现
1.死锁是什么 死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。 2.哲学家就餐问题 有五个哲学家,他们的生活方式是交替地进行思考和进餐…...

UTF-8编码
介绍 UTF-8 编码 UTF-8 是一种针对 Unicode 的可变长度字符编码。 针对 Unicode:UTF-8 是 Unicode 的实现方式之一。相当于 Unicode 规定了字符对应的代码值,这个代码值需要转换为字节序列的形式,用于数据存储、传输。代码值到字节序列的转…...

likeshop单商户SaaS版V1.8.2说明!
likeshop单商户SaaS版V1.8.2主要更新如下: 新增 前端登录引导用户填写头像昵称 PC端—注册页面显示服务协议和隐私政策 PC端—首次进入商城弹出协议提示 PC端—结算页新增门店自提的配送方式 后台—PC端菜单导航栏的跳转链接支持添加自定义链接 优…...

算法训练营 day46 动态规划 最后一块石头的重量 II 目标和 一和零
算法训练营 day46 动态规划 最后一块石头的重量 II 目标和 一和零 最后一块石头的重量 II 1049. 最后一块石头的重量 II - 力扣(LeetCode) 有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合…...

nginx-host绕过实例复现
绕过Nginx Host限制第一种处理方法Nginx在处理Host的时候,会将Host用冒号分割成hostname和port,port部分被丢弃。所以,我们可以设置Host的值为2023.mhz.pw:xxx"example.com,这样就能访问到目标Server块:第二种处理…...

Java学习记录day9
类与对象 内部类 成员内部类 在一个类的内部定义的类。 public class Outer {private int a 10;public void outMethod() {System.out.println("这是外部类中的方法");}// 成员内部类public class Inner{private int b 10;public void innerMethod() {// 外部类…...

ActiveReports.NET 17.0 Crack by Xacker
一个完整的报告解决方案,用于在您的业务应用程序中设计、定制、发布和查看报告。 ActiveReports.NET 通过直观的 Visual Studio 集成报表设计器和丰富的控件帮助您提供精美的报表。ActiveReports 提供基于代码的跨平台报告、易于使用的设计器和灵活的 API。适用于桌…...

【计算机网络】传输层TCP协议
文章目录认识TCP协议TCP协议的格式字段的含义序号与确认号六个标志位窗口大小确认应答(ACK)机制超时重传机制连接管理机制三次握手四次挥手滑动窗口流量控制拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况总结认识TCP协议 传输控制协议 (TCP,T…...

Mysql5.7安装【Windows版】
文章目录一、下载二、添加到环境变量三、添加配置文件my.ini四、安装Mysql 修改密码一、下载 下载地址 滑倒最下面有一个MySQL Community Server 选择要下载的版本 二、添加到环境变量 下载好了之后开始解压 把bin目录添加到环境变量 可以点击进入bin目录,直接复…...

分布式一致性算法Raft原理图释
什么是分布式一致性算法Raft 分布式一致性算法Raft:指在分布式场景下实现集群数据同步的解决方案 掌握了这个算法,就可以较容易地处理绝大部分场景的容错和数据一致性需求 Raft三大角色 跟随者(Follower):普通群众…...

网络安全-字典生成-crunch
网络安全-字典生成-crunch crunch工具,在kali已经集成好了 2是代表最小字符长度 4是最大字符长度 生成了一个2M的文件 还有我们来查看这个密码本 从abcd26个英文字母的2位到4位的组合,他全部排列了一次 还可以自定义数字,特殊字符…...

闪光桐人の实习日记
2023年2月13日 1,认识了职场礼仪,学习了职场礼仪的重要性 尊重->心情愉悦->建立信任与好感->合作机遇的敲门砖 2,学习了职场礼仪中的邮件礼仪 模板管理中设置自己的名片 部门写到三级部,如果部门名太长要换一行 发送…...

PostgreSQL 常见配置参数
max_wal_size : 两个检查点(checkpoint)之间,WAL可增长的最大大小,即:自动WAL checkpoint允许WAL增长的最大值。该值缺省是1GB。如果提高该参数值会提升性能,但也是会消耗更多空间、同时会延长崩溃恢复所需…...

JAVA 常用类型之String结构
String在java中我们是用来操作字符串的,但它的底层结构确是一个char[]数组,通过数组的方式将每个字符进行保存。 使用时:String str"ABCD",内部存value确是:value[A,B,C,D]; 如下图: 参考String源…...

二三层网络设备封装与解封装原理
1、寻址转发(寻址指的是寻找IP地址) 路由表放在一个公共的地方,比如主控板上,由主控板 的CPU运行路由协议,计算路由,生成和维护路由表。 转发表与路由表: 转发表是根据路由表生成的。路由表中…...

9、MyBatis框架——使用注解开发实现数据库增删改查操作、一级缓存、二级缓存、MyBatis实现分页
目录 一、使用注解开发实现数据库增删改查操作 1、搭建项目 2、使用注解开发操作数据库 二、一级缓存 1、一级缓存失效的情况 三、二级缓存 1、手动开启二级缓存cacheEnabled 2、二级缓存机制 四、MyBatis实现分页 1、配置环境 2、startPage()开启分页 3、PageInfo…...

C++STL剖析(六)—— set和multiset的概念和使用
文章目录🌟 前言🍑 树型结构和哈希结构🍑 键值对1. set的介绍和使用🍑 set的模板参数列表🍑 set的构造🍑 set的使用🍅 insert🍅 find🍅 erase🍅 swap…...

SpringColud第四讲 Nacos的Windows安装方式和Linux的安装方式
在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码: 目录 1.Windows安装Nacos 1.1.下载 1.2.解压 1.3.修改相关配置: 1.4.启动: 1.5.登录: 2.Linux的安装方式Nacos 2.1.…...

微服务项目【网关服务限流熔断降级分布式事务】
网关服务限流熔断降级 第1步:启动sentinel-dashboard控制台和Nacos注册中心服务 第2步:在网关服务中引入sentinel依赖 <!-- sentinel --> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-…...

【情人节用Compose给女神写个爱心动画APP】
情人节用Compose给女神写个爱心动画APP前言涉及知识点实现思路实现过程绘制爱心创建动画效果Preview预览效果完整源码彩蛋前言 前一阵子看电视里的学霸用代码写了个炫酷的爱心,网上有很多js和python的源码,复制粘贴就能拥有,但是Android的好…...