admin管理员组文章数量:1646246
文章目录
- **自我介绍** :
- **项目介绍** :
- 离职原因:
- **接口测试文档里面的元素:**
- 测试流程:
- **如果回归测试不通过怎么办**
- **黑盒测试** **,** **白盒测试:**
- **java和python的区别:**
- **request:**
- **unittest单元测试:**
- **pytest使用:**
- unittest和pytest区别:
- **禅道使用(BUG管理工具):**
- **git(版本控制工具)**
- **Linux常用的命令**
- **Monkey稳定性测试:**
- adb命令
- app测试
- 性能测试:(“2-5-8原则”)
- **Web端自动化selenium**
- **Fiddler抓包:**
- **Https**包怎么抓?
- Get请求post请求区别
- **常见的状态码:**
- **app端自动化appium测试:**
- **缺陷报告书写规范:**
- **jmeter使用:**
- 一.定时器(线程延迟设置为5000,就是运行完5秒后运行测试,显示结果)
- 二.循环控制器(使用的时候要把http放在循环控制器下面)
- 三.事务控制器
- 四.断言(看响应结果里面有没有断言的内容)
- 五.用户自定义变量(定一个变量,用${aaa}调用)
- 六.参数化实现之CSV(和用户自定义变量一样,只不过是从桌面的文件中取内容)
- 七.函数助手_CSVRead(和用户自定义变量一样,只不过是从桌面的文件中取内容)
- 八.正则提取器(取出获取第一个接口的返回值token放在第二个接口中当作请求参数请求)
- 九.对数据库进行压力测试
- 十.jmeter对服务器和数据库进行性能测试:
- 一、修改request请求参数值
- 二、修改request请求参数值
- 三、修改返回值 response
- 四、修改返回值 request
- 五、弱网测试
- 六、模拟 404/403 返回值
- 七、屏蔽web网页的抓包信息
- 八、抓包结果列表 只展示关注的接口
- 九、https抓包
- 十、接口压力测试
- mysql数据库
- 分组
- 分页
- 删除
- 连接查询
- **jenkins持续集成:**
- **水杯测试用例:**
自我介绍 :
您好,这是我的简历
我叫XXX,今年26岁啦,做测试有4年多啦,刚开始是做开发的,然后是开发+测试,到最近两个项目是纯测试的,上家公司是在四惠东,公司做一个xxx小视频app,还有一个是xxxapp,
测试的时候主要是对功能测试 自动化测试,还接口测试,数据库,性能测试着一些,公司用的bug管理工具是禅道,版本控制器是git,常用到的软件有linux,charles,jmeter这些
项目介绍 :
xxx是做小视频方面的,做这个app的初衷是让学生交作业的,去年8月的时候做啦整体的改版,改成和抖音差不多,只不过多啦一个商城模块,抖音的首页是视频,我们的这个app也是,但是每个视频下面都挂的有一个商品,右下角有点赞,评论,分享和商品四个小按钮,点击商品的时候显示商品的条目,有(商品图片,标题,点击进去到上商品介绍页面,就和淘宝搜索一个羽绒服,点开一个喜欢的羽绒服,跳转到这个羽绒服的详情页面,商品的图片是最多展示6张,最少展示一张的,可滑动,里面有商品介绍,最下面有详情购买,加入购物车功能,进入店铺等按钮),购买是用支付宝和微信购买方式,购买的这块测试的时候是让后台把接口里面的支付金额固定为0.01元,让开发打包给我测试,运行的本地项目,线上的话就是真实的购买,公司所有工作的费用都可以找商务报销,第二个模块商城模块是淘宝首页一样的,第三个模块是聊天的模块第四个模块是我的,和抖音的聊天和我的模块是一样的,完全一样(领导想的是超过抖音,加上商城功能)
还有一个xxx是一个关于医疗的,对接机器人的测试
离职原因:
公司总部在四川,不止一个项目总部让研发团队要和四川的合并到一块,我不想去四川,还是喜欢北京
工作经历:
2019年8月— 至今 北京XXX公司
公司地址:北京朝阳区xxxxxx
路线 :8号线平西府—10号线北土城—1号线xxx 一小时时间,下地铁步行5分钟
住址 :平西府地铁站的XXX
经营范围:总部在四川,30多亿建啦个影视学校 还有餐饮这方面 北京这边主要是写这一
个app,
公司规模:我们北京这个团队20多人,总经理办公室和产品经理 研发经理和我们开发小组在2层,人事
部门和商务在一层,董事长在3层,没见过董事长
开发人员:2个测试(另外一个是功能测试)
2个android开发
2个ios
2个ui
3个h5
一个运维
4个产品
职责 :
1,测试用例 计划 测试报告编写
2,用例评审,并执行用例,复现bug,对修改的部分针对性测试
3,用monkey进行随机测试和压力测试并生成日志发给开发
4,编写脚本利用Python,appium selenium工具对核心主功能进行自动化测试
5,结合使用禅道提交bug,跟踪管理bug
6,和研发和产品沟通项目进度
接口测试文档里面的元素:
info:接口功能,接口URL地址,请求方式,请求头,请求参数,请求参数值,预期响应结果,测试结果,测试人
测试流程:
测试用例,测试计划,测试报告的区别:
测试计划(需求评审之后,开始测试人员开会研讨测试计划,测试模块的分工)----测试用例(规划完测试计划后,就开始写测试用例)------测试报告(版本上线前或者领导要看测试情况的时候交给领导的)
功能测试用例编写:
所属模块----功能编号----优先级----执行条件----输入数据----输入步骤----预期结果----实际结果----测试人员----测试版本
讲解:
性能测试用例也不太一样,用例id,测试步骤,测试模块这块是一样的,但是性能测试用例里边我们一般还会包含,事务设置,前置条件等信息,就是在做压测或者负载测试的时候,我们会设置一些事务,从xx开始到xx结束,叫做一个完整的事务,前置条件就是在执行这些测试,是否有什么必须的条件,比如是否要登录。
再就是设计测试场景,这块是性能测试特殊的地方。比如在用例中指定并发用户数,指定压力方式,是随,,机,还是一次启动,还是逐步递增,指定负载测试时间,是10分钟还是1小时,把这些信息也要包含到用例中。
还有就是期望结果,期望结果应该包含多项内容,比如事务成功率,CPU利用率,内存利用率,硬盘利用率,响应时间等信息,这些的预期结果都是跟我们的测试需求上相匹配的。
性能测试用例:
基本信息——用例编号,用例名称,测试接口——前置条件——性能输入参数——并发量,迭代册数,思考时间,压测时间——预期结果,响应时间,吞吐量,错误率
接口测试用例:
用例编号——接口名称——url地址——请求头——请求参数——输入参数——预期结果——实际结果——测试人员——测试版本
测试流程:
1,需求评审:
从用户角度提供设计建议
从开发经验角度,分析设计是否存在风险,是否能够实现
联合其他模块分析,设计是否存在漏洞,逻辑功能存在缺陷
2,测试计划制定:
测试用例设计
测试用例评审,和测试时间估计
测试资源申请
3,测试计划执行:
用例执行
Bug修复验证和推动版本进度
性能监控,压力测试,兼容测试
4,发布与测试报告总结:
版本发布和线上质量监控,用户反馈实时响应
测试用例更新整合,测试计划评估
提供版本最终测试报告,包含用例覆盖率,bug数据分析等
项目流程:
立项
需求文档(需求人员)
需求评审(开发,测试,项目经理,需求)
详细设计(开发人员)
测试用例(测试人员)
测试用例评审(开发,测试,项目经理,需求)
编码
部署环境(测试)
冒烟测试
bug(禅道)
测试报告
上线(运维)
测试分类:
按阶段划分:单元测试,集成测试,系统测试,验收测试
按是否运行程序划分:静态测试,动态测试
按是否查看源代码划分:白盒测试,黑盒测试
黑盒测试:功能测试:逻辑功能测试,界面测试,易用性测试,安装测试,兼容性测试
性能测试:一般性能测试,稳定性测试,负载测试,压力测试
如果回归测试不通过怎么办
1,首先考虑环境问题,看是否能还原原来的环境
2,遇到问题就要提,不能放过任何一个bug,在提交bug描述中加上一句话,那就是复现概率,尝试20次,出现一次或尝试10次,交给开发,开发会根据bug的复现概率,调整bug的优先级
3,尽量回想发生问题时的复现步骤,不要漏掉任何一个细节,按照步骤的组合尝试复现
4,查看代码,也许是代码变更,引起的Bug
5,保留发生bug的log,附加到提交的bug中,希望可以通过log中找到一些蛛丝马迹
黑盒测试 , 白盒测试:
单元测试 白盒测试
集成测试 代码和界面
功能测试 界面测试
项目中的测试分为黑盒测试和白盒测试。
黑盒测试是是对功能测试(界面测试),检查软件功能是否实现符合需求。
白盒测试是单元测试自动化测试,主要是对代码的测试
java和python的区别:
python和android在写的过程中没什么太大的区别,android用的是androidstudio,python用pycharm写,这两个软件里面的功能几乎也都是一样样的
代码深入区别的话python虚拟机没有java强,java虚拟机是java的核心,python的核心是可以很方便地使用c语言函数或c++库
Java开发偏向于软件工程,团队协同,Python更适合小型开发,效率极低;
Java是一种静态类型语言,Python是一种动态类型语言;
Python比Java简单,Java语法定义较复杂,Python语法比较简洁,就比如
android创建一个类是public class 类名{}
python只用class 类名:就可以
方法:
android写一个方法需要public 返回值类型 方法名(){}
python只需要def 方法名()
变量:
android定义变量需要写变量的类型 int sum = 0;
python只需要写 变量名=值
创建对象:
android定义变量需要new一个对象
python省去new
if语句 : 也是也是比较简单
例:
在测试中用python主要是写app和web端的自动化测试,比如测试购物车,支付测试的时候需要用到加入购物车后支付,查看购物车里面加入的商品,查看购物车里面的商品,开发写一个功能你测试一个,全部写完你还需要在测试一遍,等到上线前还是需要测试,下一个版本上线前需要做一个回归测试,重复的测试,重复的点点点,用自动化只用运行一下自己写好的自动化测试用例代码就可以啦,方便复用,省去很多时间也可以完整的测试代码,以免回归测试或者上线前的测试,可能有些细节漏掉测试这样的问题
request:
request是一个很实用的python的HTTP客户端库,编写爬虫和测试服务器响应数据时候经常用到,request是pyehon语言的第三方的库,专门用于发送HTTP请求判断接口有没有问题,可以查看请求头,请求体和返回的code码,用这个主要就是方便后期测试接口的时候方便,通常是创建一个csv文件,里面放着每个接口需要测试的数据,接口,然后编写脚本,读取对应的csv文件数据,将数据存储列表中通过索引取出,输入对应的索引取出(例如:0.0获取第一个参数,0.1获取第二个参数)传到页面上代码的地址拼接后面,不用下次回归测试的时候,一个个参数手动输入,这个测试接口传参只需要读取csv文档之前测试过的参数就可以
get请求:
rr = requests . get(“http:www.baidu”)
传参:
pay = {‘key1’:‘value1’,‘key2’:‘value2’,‘key3’:‘value4’}
rr = requests . get(“http:www.baidu” , params = pay)
响应:
rr.status_code 响应状态码
rr.heards 响应头
rr.cookies 响应cookies
rr.test 响应文本
rr.encoding 当前编码
rr.content 以字节形式(二进制)返回
unittest单元测试:
unittest测试导入第三方插件HTMLTestRunner.py
python+unittest+HtmlTestRunner单元测试
将传递参数利用csv/xml等文档存储,使业务与数据分离
编写脚本获取文档中的数据
导入unittest模块,在测试用例中(test开头的方··法)调用被测的程序的最小模块(函数)并传递参数,通过断言的方式(assertEqual)验证被测程序中返回值和预期结果是否相同
最后导入第三方模块HtmlTestRunner生成对应的测试报告
pytest使用:
pytest代码自动化测试
unittest测试导入第三方插件HTMLTestRunner.py
pytest需要导入allure第三方插件,用allure生成测试报告,pytest也可以生成测试报告,但是不能自定义设置一些参数,allure更详细一些,可以自定制,在代码中写入想要的元素,想要的元素可以在测试报告展示出来,所以就经常结合导入allure插件
pytest比unittes更严谨
- 测试文件以test-开头(以-test结尾也可以)
- 测试类以Test开头,并且不能带有 init 方法
- 测试函数以test_开头
- 断言使用基本的assert即可
pytest自带的插件使用:
pytest.main([“test_1.py”]) 只运行test_1.py模块中的测试用例
pytest.main()运行所有test-开头或者-test结尾的.py文件
pytest.main([“–html=./report.html”, “test_aaa.py”])#打印test_aaa.py的全部用例,生成测试报告
pytest.main([“–html=./report.html”, “test_aaa.py::TestClass::test002”])# 只打印test002里面的
allure使用:
首先要安装allure
pip install allure-pytest
allure常用的几个特性
@allure.feature # 用于描述呗测试产品需求
@allure.story # 用于描述feature的用户场景,即测试需求
Withallure.step(): #用于描述测试步骤,将会输出到报告中
Allure.attach #用于向测试报告中输入一些附加的信息,通常是一些测试数据,截图等
pytest.main([’–alluredir’, ‘report/result’, ‘testshop.py’])
将json转换成HTML文件
split = ‘allure’+ ‘generate’+ ‘./report/result’+ ‘-o’ + ‘./report/html’ +‘–clean’
os.system(split) # system函数可以将字符串转化成命令在服务器上运行
unittest和pytest区别:
unittest代码自动化测试
unittest方法名要test开头和结尾
unittest测试导入第三方插件HTMLTestRunner.py
pytest 类名要test开头 , 模块名.py字和方法名用test-开头或者-_test结尾
首先要安装allure的pip install allure-pytest
禅道使用(BUG管理工具):
存储bug的工具用到两个存储,一个是公司自己写的一套和禅道功能差不多,我们的测试用例也是在公司的bug工具里面写的,上家公司和第一家公司都是用的禅道写的,
添加人员是运维添加的,把自己的邮箱号发给运维,运维把你添加到禅道测试人员分组里面,并且把登陆禅道的密码发给你,账号就是自己的邮箱号
用禅道提交缺陷报告:
缺陷标题,简要描述,缺陷类型,缺陷的详细步骤描述(难复现的bug上传图片),缺陷的实际结果,期望结果,缺陷等级,日志信息,指派给哪个开发同事
git(版本控制工具)
Git是一个开源的分布式版本控制系统,可以有效的,高速的处理从很小到非常大的项目版本管理
操作步骤:
1.新建一个仓库(网页点击+)
2.把远程仓库clone到我们的本地仓库
git clone <你仓库的地址> -->cd 仓库名–>git status 查看状态
3.把项目拖拽到你的文件夹(查看一下 git status 是否多了什么东西) 并输入命令 git add . 进行提交 git status 查看状态
4.我们进行提交 git commit -m ‘这是一次提交’ git status 查看状态
5.先拉取 git pull -Already up to date.-你的当前日期是没问题的
6.最后一步 git push 一下 上传成功
Svn 使用 :
集中式
码云使用 :
Git svn 码云的区别: ·
Linux常用的命令
配置服务器的时候,默认不对外开放的话是访问不到的,因为他比较安全
pwd 查看当前位置
ifconfig ip地址
mkdir 创建目录
touch touch aaa.txt文件夹中创建新文件
rm -rf 强制删除
find 查,查找/root下的与test相关的目录(文件) find / -name ‘test*
ls -a 查看隐藏文件
ls -l 查看非隐藏文件的访问权限
ls -l 在当前目录 / 下使用ls -l,可以看到该目录下的所有目录和文件的详细信息可以缩写成ll
ls 查询创建的文件或文件夹
cd/ 切换到根目录
cd…返回上一级
tail -f 是实时打印日志,在项目中如果是实时刷新的情况下,用-f会试试打印刷新的数据,可以对文件进行动态监控,例如tomcat的日志文件,会随着程序的运行,日志会变化
cp 复制 cp 目录名称 目录的新位置
mv 目录名称 新目录名称 修改目录名称
mv 目录名称 目录的新位置 “ 剪切 ” mv hrllo.txt …/aaaa/ 把当前目录下的文件hello.txt剪切到上一级目录的子目录aaaa目录里,
pring 查看通不通 (例如:pring www.baidu)
kill -9 进程的pid 杀死进程
grep 搜索命令,grep to /usr/sudu.conf搜索/usr/sudu.conf文件中包含字符串to的行
top 查看cpu使用率
| 对左边命令筛选,对右边进行过滤
ps -ef 查看进程
ps -ef | grep tomcat查看tomcat进程是否被开启
netstat -an 查看所有端口号
netstat -an | grep 9050 查看9050端口是否被占用
tar -zcvf xx.tar.gz xxx 打包并压缩(xx.tar.gz里面的xx是打包后的名字,最后的xxx是要打包文件的名字)
tar -zcvf xxx.tar xxx打包 打包文件一般是以.tar结尾的
tar -zcvf xxx.gz xxx压缩? 压缩的命令一般是以.gz结尾的
tar -xvf xxx.tar解压
tar -xvf xxx.tar.gz -C /usr 解压到根目录/usr下,C代表指定解压的位置
vim 编辑 vim aaa.txt
关于vim使用过程:
:wq 保存并退出编辑
:q 是不保存强制退出
在实际开发中,使用vim编辑器主要作用就是修改配置文件
vim 文件------>进入文件----->命令模式------>按a进入编辑模式----->编辑文件 ------->按Esc进入底行模式----->输入:wq/q!
777是什么意思
chmod 修改文件/目录的权限的命令,修改/test下的aaa.txt的权限为属主有全部权限,属主所在的组有读写权限,
其他用户只有读的权限chmod u=rwx,g=rw,o=r aaa.txt chmod 777 aaa.txt
文件的类型:
d:代表目录
-:代表文件
l:代表链接(可以认为是window中的快捷方式)
分别代表u属主的权限,g与当前用户同组的用户的权限,o其他用户的权限
r:代表权限是可读,r也可以用数字4表示
w:代表权限是可写,w也可以用数字2表示
x:代表权限是可执行,x也可以用数字1表示
文件权限:
—rwx rwx r——
文件类型 属主权限 属组权限 其他用户权限
r读取权限 w写入权限 x执行权限 —无操作权限
r=4 w=2 x=1
Q -9端口号杀死指定的端口号
部署linux时候接触过哪些版本:
centOS Ubuntu 付费的redhat
linux的安装:
安装SSH Secure shll虚拟机软件
安装CentOS(模拟出一台Linux系统电脑)
写的时候用SSH Secure shll远程连接Linux的工具,CentOS是服务器在机房里,我们只能远程连接
linux的环境搭建和服务部署
(1)环境搭建(linux)
先准备好jdk,和tomcat的tar包
连接对应的linux服务器,将对应的包放在服务器上
因为tomcat是基于Java来写的,所以先配置Java的环境变量
将jdk进行解压(tar-xvf 包名),在配置文件中添加jdk的路径,并重新加载配置文件
并验证Jdk是否配置成功,Java -version,如果能打印出对应的jdk版本号说明配置成功
然后解压tomcat对应的tar包,
开放Linux的对外访问的端口8080(/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT /etc/rc.d/init.d/iptables save —将修改永久保存到防火墙中)
进入bin目录下,启动tomcat(./start.bat)
(2)服务部署
将开发打的包(tar包)进行解压,放在tomcat下的webapps目录下
启动tomcat,那么该服务就启动了,(验证tomcat是否启动ps -ef |grep tomcat)
数据库连接Linux需要输入Linux的IP地址
Monkey稳定性测试:
1)安卓app的稳定性常常使用monkey命令进行测试,通过随机事件流模拟人的操作,对检查程序的内存溢出、空指针有很大的作用。
2)Monkey主要用来检测系统ANR(应用无响应)及Crash(崩溃)等问题。
adb shell monkey -p com.zhihu.android -s 23 --throttle2000 --ignore-crashes --ignore-timeouts -v -v -v 100000>/data/local/tmp/log.txt 2>&1 &
我就简单的说一下测试的指令吧,我们用 adb shell mokey -p 指定要测试的包名----
-s后面是对应的种子数----- --throttle 38指定延迟时间毫秒 — ignore-crashs 忽略崩溃ignore-timeout 超时---- -v指定log打印的等级 — 点击次数10000 — log存放地址
将测试log存到某个位置,然后把测试出的bug 日志发送给开发
adb shell monkey 100 随机测试手机上任意app点击100次
adb shell monkey -p com.zhihu.android 110方法没用?测试某个app110次 (运行一次命令,app动一次?)
保存monkey生成的日志文件到C:\Users\yiyuan\Desktop\csApp\aa.txt
adb shell monkey -p com.zhihu.android -v 110 >C:\Users\yiyuan\Desktop\csApp\aa.txt
- monkey命令的启动: adb shell monkey + 命令参数
- 对app进行多次访问的测试: adb monkey -p (包名 具体的页面) 100 访问的测试
- 显示日志的详细程度:
- -v 启动提示及测试完成 最终结果
- -v -v 标为详细的日志发 送到activity (页面的)的事件信息
- -v -v -v 最为详细的日志 测试中选中或者是没有选中的activity(信息)测试信
- 打印日志的命令: adb shell monkey 200 >d: / monkeylog. txt
- –pct-touch 调整触摸事件的占比
- adb shell monkey -p com.wan.android -pct-touch -v 10
- –throttle 用于用户对app的操作上的时间延迟 单位是毫秒|
- 没有时间延迟 monkey会以最快的方式进行操作 发送请求
- –pct-motion 动作事件的占比
- –ignore-crashes 如果app发生崩溃或是异常时 monkey会停止执行
- 在adb命令中有此命令参数 monkey会继续执行直到事件计数完毕
- –ignore-timeouts (ANR) app发生超时限制的时候
- 在adb命令中有此命令参数 monkey会继续执行直到事件计数完毕
- 0 触摸事件的占比
- 1 手势事件占比
- 2 两指操作占比
- 3 动作事件(有一定轨迹)
- 4 屏幕旋转的占比
- 5 导航事件 上下左右
- 6 导航事件 home 回退 隐藏菜单
- 7 按键事件 关机键 音量加 减
- 8 启动activity事件
- 9 键盘抬起事件
- 10 其他事件
详细解释monkey:
案例
adb shell monkey -p com.tencent.mtaexample -s 23 --throttle2000 --ignore-crashes --ignore-timeouts -v -v -v 100000>/data/local/tmp/log.txt 2>&1 &
- -p后面接着的对应的包名,如果是整机测试,就不需要 -p package_name
2. -s后面是对应的种子数,好像就是操作步骤,根据她们测试的经验,一般种子数在23,同步她们测试的结果,一般种子的个数固定为23,和她们选择的操作步骤就是同步的。–throttle 用于用户对app的操作上的时间延迟 单位是毫秒|
3. --ignore-crashes --ignore-timeouts 这里是在monkey测试的过程中遇到carash或者timeout的情况时忽略掉,一般不设置时,出现carash或者timeout时,Monkey测试会终止。
这里是防止Monkey测试终止。
4. -v 指的是Monkey测试时打印log级别。
5. 100000 这里是指点击的次数,根据她们测试的经验,对于单个应用程序这个次数设置在100000次就可以了;如果是整机,一般设置在500000次。/data/local/tmp/log.txt测试的log记录在手机上/data/local/tmp/ 下面的log.txt里面,这个名字可以自己写。
6. 2>&1 固定的写法,这个也很重要,代表的意思是中间忽略的东东的日志一并输入到指定的文件中。
7. 最后单独的一个"&" 是一旦Monkey测试开始了,之后可以拔掉数据线,不会影响Monkey测试。
8. 测试所有模块 monkey -s 23 --ignore-crashes --ignore-timeouts -v-v -v 100000> /data/local/tmp/log.txt 2>&1 &
adb命令
-
查看当前连接设备: adb devices
-
查看日志:adb logcat
-
安装apk文件:adb install c:/aaa.apk (apk的绝对路径)
-
覆盖安装: adb install -r c:/aaa.apk (apk的绝对路径)
-
卸载App: adb uninstall 包名 adb uninstall -k 包名 (保存配置及缓存文件)
-
列出所有的包名: adb shell pm list package
-
列出第三方的包名: adb shell pm list package - 3
-
列出系统应用的包名: adb shell pm list package - s
-
查看手机cpu情况:adb shell dumpsys cpuinfo
-
查看应用内存的命令: adb shell dumpsys meminfo 包名
-
查看app启动的时间:adb shell am start -W 包名/启动名
-
启动: adb start server
-
关闭: adb kill-server
-
adb logcat *:E >C:\log\e.txt
日志级别
V Verbose 最低
D Debug bug
I Info 信息
W Warn 警告
E Error 错误
F Fatal 致命
S Silent (sup(:
app测试
功能测试:
1.业务逻辑正确性测试:依据:产品文档->测试用例编写
2,ui测试,功能,性能测试,安装卸载测试,软件升级测试,登陆测试,安全性测试,消息推送,前后台切换,兼容性测试,网络环境测试,monkey测试。
兼容性测试:
1.系统版本:Android:官方版本,定制版本;IOS:官方提供版本
2.分辨率:720 * 1280 和1080* 1920
3.网络情况:2g 3g 4g 5g Wi-Fi
异常测试
1.热启动应用:应用在后台长时间待机;应用在后台待机过程中,手机重启
2.网络切换和中断恢复:网络切换;中断恢复:
3.电话信息中断恢复
升级,安装,卸载测试
1.升级测试:临近版本升级(1.0->1.1);跨版本(1.0->…->2.2)
2.安装测试:首次安装;覆盖安装(同版本,不同版本覆盖);卸载后安装
3.卸载测试:首次卸载;卸载安装后在卸载
健壮性测试
1.手机资源消耗:cpu,内存
2.流量消耗:图片,数据,视频
3.电量测试
4.崩溃恢复
app兼容测试
功能测试
机型测试
屏幕适配(720X1080)
版本测试
网络测试
推送和更新测试
弱网测试
安装卸载测试
web兼容测试:
不同浏览器之间测试
同一个浏览器不同版本的测试
操作系统的测试(weindow linux)
网络测试(内网外网)
电脑分辨率测试(分辨率低页面可能会错乱)
app和web端测试的区别:
bs和cs,bs是浏览器和服务端, cs客户端和服务器,cs比bs的成本要高,因为要开发,cs维护成本比bs高,浏览器只需要更新浏览器就可以,cs需要发布更新,cs是局域网,bs是广域网
性能测试:(“2-5-8原则”)
1)客户端性能:
测试重点关注:安装卸载时间、启动时间、页面加载时间、事务响应时间、主要功能占用CPU、内存、流量、耗电量等, 容错率 多并发,以及同类产品相比较是否有优势:
1,时间性能:软件的一个具体事务的响应时间。比如点击一个登陆按钮,到登录成功(失败)的反应时间,浏览器非常常见, ANR(Application not responding 应用程序无响应)
2,空间性能:软件运行时所消耗的系统资源,比如对内存和cpu的消耗
3,一般性能测试:软件正常运行,不向其施加任何压力的测试
4,稳定性测试:也叫可靠性测试,是指连续运行被测系统,检查系统运行时的稳定成都。monkey
5,负载测试:让被测系统在其能够忍受的压力范围之内连续运行,来测试系统的稳定性。
6,压力测试:持续不断的给被测试的系统增加压力,直到被测试的系统压垮为止,用来测试系统所承受的最大压力。
其中页面加载时间可以利用Android调试工具DDMS获取到;
运行过程中主要功能占用CPU、内存、流量等可以借助开源工具(Emmagee、itest、gt)获取。
DDMS可以实现查询终端设备运行状态,终端设备进程状态,线程状态,文件系统,日志信息(logcat)等。以及控制终端设备,完成一些操作。总的来说它是一款性能分析工具,可以帮助开发者快速了APP的运行情况。
基准性能测试:主要通过压服务器端接口及客户端在不同网络环境下响应速度。主要为258原则。
大数据量的测试:主要在特定环境下,客户端一次性更新大量的数据,客户端能否正常处理,分为三种情况:
- 客户端第一次使用,第一个就更新大量数据;
- 客户端正在更新中,更新大量数据;
- 客户端以及在手机本地下载很多数据后,再次更新大量数据。
2)服务器端的性能:
主要利用接口对服务器施加压力,重点关注响应时间、吞吐量、并发数、事物通过率等,可以视同工具loadrunner、Jmeter等进行测试。
测试多并发,在服务器上测试最多能有多少用户,根据日活量来测试,比如800个用户,我并发1000次,然后看看占用了多少
之前有公司,写项目之前用户给的指标 cpu占用 磁盘内存 需要在服务器上创建虚拟机,模拟有多少个人能进行操作,这时候就需要创建多少个虚拟机
BS/CS架构的区别是什么?
**概念:**所谓的架构就是用来指导我们软件开发的一种思维,目前最长见的就是BS/CS.
B—browser 浏览器
C—clent 客户端
S—server 服务端
区别:
1,标准:相对于cs架构来说Bs架构的两端都是使用现成的成熟产品,bs会显示的标准一些。
2,效率:相对于bs架构来说cs中的客户端可以分担一些数据的处理,执行效率会高一些。
3,安全:bs架构当中得到数据的传输都是以Http协议进行传输的,而Http协议又是明文输出。可以被抓包,那么cs架构比Bs架构显得就不那么安全了,(其实都是相对的)。
4,升级:bs架构只需要在服务器端将数据进行更新,前台只需要刷新页面就可以升级,而cs架构必须要将两端都进行更新才可以。
5,开发成本:相对于bs架构来说cs当中的客户端需要自己开发,bs不用,所以说cs成本会高一些。
Web端自动化selenium
讲解:
Selenium,在使用的时候,首先应该配置好selenium的环境,selenium有几个核心的组件,一个是seleniumIDE,IDE主要用在浏览器录制环境上边,可以在浏览器上安装selenium IDE插件,打开录制按钮,录制用户操作,可以进行脚本回放,通过脚本回放,演示录制的脚本是否可用。还可以从浏览器上将录制的脚本导出,以执行脚本代码的形式,执行自动化测试。
我们使用Selenium主要是使用Python代码写脚本,这个需要在python中配置selenium的依赖包,我一般是在python的Scripts的文件夹中,在线下载selenium的相关包。
使用Python做selenium的自动化脚本编写,我一般情况下,会使用Python的unitest执行测试代码。而selenium中比较核心的API,是webDriver,可以通过webDriver完成相应的代码调用。我就简单介绍一下webDriver中常用的操作吧。
要做自动化测试,比较关键的是能够定位到页面元素,定位到元素之后,就可以执行相应元素操作。webDriver中提供了各种方式来定位页面元素,比如通过id,通过link Text,通过css,通过xpath来定位元素,一般,如果有id,我们就使用id,然后使用css或者xpath来定位,dom(document object model) 元素,当然定位的时候,需要在浏览器里边安装firebug firepath来抓取页面元素对应的xpath信息。
定位到元素之后,可以对元素进行操作,比如最简单的操作,我们对文本框使用send_keys设置值,可以使用clear清除值,也可以调用一些键盘的按钮做值得操作,比如回车,比如删除一个字母,还可以调用按钮的点击,其实就是模拟我们人为的操作。通过这些操作,我们就可以完成界面基本的操作,比如登录注册,跳转界面,可以使用这些api来做到。
当然除了这些,Selenium中还有其他一些API的操作,比如关闭浏览器,设置浏览器界面的大小,回退前进操作,还可以获取当前界面的title,获取当前界面的url,还可以设置当前操作等待,当然了,我们使用python中的API time.sleep本身是可以做到的,而webDriver中提供了对应的显示等待和隐式等待的方式,
另外,在Selenium中,还有切换弹框,切换Frame,切换Window的操作。这种操作也挺常见的。比如有弹框弹出来,元素就没法定位了,我们需要将焦点切换到弹框上,比如页面上是有frame框架的,需要切换frame,才能找到对应的frame所在的页面的元素。还比如会在某个页面操作的时候,会换到一个新的窗口中,就需要切换window。这里边关键词都会用到switch关键词。
再就是我们写自动化代码,肯定是要进行封装的。在这里我用到的思想是PageObject。将每个页面独立分开,都继承一个统一的Page类,各自执行各自页面的逻辑。
我们公司在做selenium自动化测试的时候,还会生成测试报告,我们使用的是HTMLTestRunner这个工具包来形成html形式的报告,测试fail的信息,会呈现在报告中,并且可以点击查看错误内容。然后将测试信息发送到开发或者我们测试自己的手里。
以上就是我们使用selenium的基本操作吧
介绍:
自动化测试,一般就需要使用脚本来进行测试,也可以叫做白盒测试,技术含量相对来说比较高 , 我会的语言是python,基本上python的代码基础我是掌握了的
selenium是对web做自动化测试的框架,导入IDE插件还可以录制脚本,输入要测试的网址,脚本录制完成后点击把录制好的脚本用python unittest webDriver的的格式导出,在python中打开运行(如果用java运行的话就导出java格式的)
自动化:
自动化代码我用的是火狐浏览器,用火狐浏览器是因为火狐2代的自带的有驱动,使用起来也比较稳定,火狐对应的selenitm需要下载2代的,如果下载3代的就需要下载火狐的驱动啦,用google的话或者ie需要手动下载驱动(驱动chromedriver.exe放在pyCharm里面),而且Goole使用起来会不断的升级,自动升级一次遇到一次问题,设置不让自动升级的话,有些地方会提示需要升级
selenium环境搭建:
材料1,python不要超过3.8(python3.7)
材料2,Firefox35(火狐不超过43)
材料3,selenium2框架用2代的 稳定版本2.48.0(pip install selenium=2.48.0)
selenium编写:
1,库导入:
from selenium import webdiver
2,创建浏览器对象
driver = webdriver.浏览器()
driver .get(url) 请求某个url对应的响应
driver .refresh() 刷新页面操作
driver .forward() 前进到之后的页面
deiver.title() 获取浏览器的标题
deiver.page_source 获取网页源码
driver .back() 回退到之前的页面
deiver.close() 关闭当前标签/窗口
deiver.quit() 关闭所有标签/窗口
八大定位元素:
安装完插件后>鼠标右键>使用Firebug查看元素
1,find_element_by_xpath()查找(选中元素>FirePath>XPath)
2,find_element_by_id()通过id定位
3,find_element_by_name() 通过name查找4.find_element_by_css_selector() 选择器(点击完元素,点击代码右键>复制唯一选择器)
5,find_element_by_class_name() 通过class查找
6,通过页面文字模糊查询,精准查询
#精确查询跳转 hao123
# diver.find_element_by_partial_link_text(“hao123”).click()
# time.sleep(5)
#模糊查询跳转 hao123
diver.find_element_by_partial_link_text(“hao1”).click()
Selenium IDE录制脚本步骤:
安装插件 > 填写被测试网站 > 控制运行速度 > 录制(点击录制,记录你对浏览器的操作) > 导出录制好的脚本 > 文件 > Export Test cast as > Python2 /unittext/webDriver > 文件保存到桌面上,复制到python中运行
录制脚本常见问题:
1,录制的时候把速度调慢点,速度太快的话再录制的过程中会因为没加载出来而暂停录制脚本
2,录制完成后,运行的时候打开窗口需要添加打开窗的方法,录制的脚本里面没有自带的打开窗口
tb.switch_to.window(tb.window_handles[1])
3,录制好的脚本,可能有些定位的也有问题,需要修改
Fiddler抓包:
Fiddler:
1,设置Http代理,设置端口号,在手机上设置与fiddler在同一网段上,设置代理ip,设置代理端口,手机上的请求就能获取到了。
2,抓取请求查看,可以过滤,找到自己域名下的请求,通过分析请求地址,请求参数,响应结果来查找问题。
Https包怎么抓?
1,http与Https协议区别在于Https多了一个ssL协议,更加安全,默认端口是443,而http默认端口是80.
2,抓取Https时,需要获取申请证书,在fiddler与charles两个工具中,可以模拟下载966证书,下载后,在手机上访问代理服务器的ip与端口,下载证书,就可以抓取到HTTPS的请求了。
Get请求post请求区别
get请求通常从服务器获取数据,请求参数在地址栏之后,数据量有限制,不够安全
Post请求通常往服务器提交数据,请求参数在请求实体中,数据量无限制,较为安全。
在postman中post请求中设置form-data类型,上传文件,也可以设置raw类型,可以上传xml类型的文件。
常见的状态码:
答:
200:请求发送成功。
302:代表重定向。
400:客户端发送的请求语法错误。
401:请问的页面没有授权。
403:没有权限访问这个页面。
404:没有这个页面。
500:服务器内部异常。
501:当前不能处理客户端的请求。
504:服务器端超时,没返回结果。
app端自动化appium测试:
使用appium之前,确保adb连接真机成功进行操作
1.启动appium软件,主机号默认为127.0.0.1 端口号默认为4732 启动服务器,点击 搜索框 进入编辑页面
2.需要填写元素,进行保存
platformName : 平台名称 (iOS, Android)
platformVersion : 设备系统号版本号 (adb shell getprop ro.build.version.release)
deviceName : 设备号 (adb devices)
打开要测试的app,输入命令查看包名和启动项(adb shell dumpsys window |findstr mCurrentFocus)
appPackage : (查看包名和启动项/ 前面的)
appActivity : (查看包名和启动项/ 后面的)
对号入座 点击 启动会话
我们在界面点击 可在右侧获取元素 可点击查找 确保锁定页面是否正确
- 开始录制 录制完后可导入pycharm(在操作之前,确保锁定的页面没有错,要不然会获取不到元素)
- 接下来 你就可以根据你的具体需求对你的app端进行自动化测试了
缺陷报告书写规范:
1、标题简洁、提供缺陷的本质信息即可
2、复现的步骤要详细,应包含如何使别人能够很容易的复现该缺陷的完整步骤。用数字编
码。
3、实际结果要描述清楚,及错误的结果。
4、列出预期结果
5、测试数据
6、提供附件
7、提供严重属性和公司需要填写的属性
性能测试:
常用于测试 :模拟并发测试 压力测试 负载测试 性能测试
性能指标:
查看系统指标: 并发数,cpu内存使用情况,吞吐量,请求时间,响应时间 258 ,查看结果树里面的平均请求时间,最大请求时间,TPS,并发数,点击率
资源使用率: CPU使用率 75% 内存使用率 80% 磁盘吞吐率 80% 网络吞吐率 80%
jmeter使用:
使用流程:
-
下载jmeter连接数据库的jar包 在测试计划添加数据库连接jar包
-
右键添加 --> 线程 --> 线程组 --> 并发数量 --> 指定测试接口
-
创建响应监听器
-
添加查看结果树 聚合报告
-
通过监听器来监听是否通过或者存在什么问题
其中在结果树中可以监测到整体的请求信息,就拿Http请求这种来讲,其实就是整个http协议的所有信息,包括请求头,请求参数,请求路径,还有响应头,响应结果等信息。
对于表格查看结果,可以看到每个请求的简单信息,本次请求的时间,以及平均的时间。
在聚合报告中,我们就可以看到整体的信息了。比如可以看到平均响应时间,90%Line 也就是90%的用户请求低于的时间。还有吞吐量 TPS,还有错误率,还有用流量来计算的吞吐量。这些都可以看到。通常,聚合报告就是反应整体的数据。
在进行多线程并发的时候,如果需要多个参数,可以使用csv配置元件。比如做登陆操作,后台有可能会限制一个用户不能重复登陆多次,如果演示登陆的并发操作,可以使用Jmeter中csv配置元件,将用户信息导出来,放到文件中,就可以让线程共享这些数据。另外,对于一些随机变化的参数,可以使用Jmeter中的函数助手,生成随机函数,进行参数化测试。比如注册这样的操作,用户名要求唯一的,那就可以使用随机函数来模拟出来。
jemeter可以服务器响应的最大时间和最小时间,但是看单个接口的响应时间需要用fiddler,在fidler里面点击接口鼠标右键选中properties,会打开一个文件,在里面可以看到接口的一些信息,可以看到接口的响应时间
性能测试主要看到是tps,容错率,吞吐量,最大响应时间,最小响应时间,平均值
吞吐量:是服务器每秒处理的请求次数
容错率 : 是测试接口测错误率百分比
平均值:是总运行时间除以总共发送到服务器的请求数量
tps:是每秒的事务数,(从请求时间开始计算到请求结束算一个事务)就比如我首页视频点赞接口测试,我并发1000次,每秒点赞成功3个,也就是3个事务的意思也就是一秒产生3个tps,也可以后台测出来的一秒点赞成功1个,是一秒一个tps,当然压测一秒点赞成功的越多越好系统的性能由TPS决定,跟并发用户数没有多大关系。在同样的TPS下,可以由不同的用户数去压
一.定时器(线程延迟设置为5000,就是运行完5秒后运行测试,显示结果)
Test Plan(测试计划)–>add(添加)–>Threads(线程)–>线程组
线程组–>添加–>Sampler(采样器)–>HTTP请求
HTTP请求—>添加–>定时器–>固定定时器–>(设置定时时间,这里是毫秒)
二.循环控制器(使用的时候要把http放在循环控制器下面)
在Jmeter中,逻辑控制器的应用比较广泛,我们可以把一组操作放到简答控制器中,用来声明范围。也可以设置循环控制器,比如我们注册1次,登陆10次,就可以使用循环控制器。还有事务控制器,对于一个完整的事务,可以使用事务控制器来控制。
线程组–>添加–>逻辑控制器–>循环控制器–>(填写循环数)
循环控制器–>添加–>Sampler(采样器)–>HTTP请求
三.事务控制器
线程组–>添加–>逻辑控制器–>事务控制器–>(选中 Generate parent sample 只显示一条数据当做一个整体)
事务控制器–>添加–>Sampler(采样器)–>HTTP请求
四.断言(看响应结果里面有没有断言的内容)
在测试中,断言操作经常用到,jmeter的断言操作可以在请求后边设置一个断言结果,判断响应结果或者是响应状态码是否和预期的一致。
HTTP请求–>添加–>断言–>响应断言
响应断言–>要测试的模式(填入你想要的数据)–>(数据里面有想要的数据就正确(STATUS OK是可以匹配成功的),没有就报错(没有匹配到字符串STATUS OKK))
五.用户自定义变量(定一个变量,用${aaa}调用)
线程组–>添加–>配置元件–>用户自定义变量–>自定义变量–>HTTP请求–>调用值
六.参数化实现之CSV(和用户自定义变量一样,只不过是从桌面的文件中取内容)
线程组–>添加–>配置元件–>CSV数据文件设置–>文件名(编辑)–>文件编码(编辑)–>变量名称(自定义 根据所对应的变量)–>HTTP请求(调用这个变量)
CSV数据文件设置–>遇到文件结束符再次循环(true/false(超过文件数量时就报错,不超过就循环))
七.函数助手_CSVRead(和用户自定义变量一样,只不过是从桌面的文件中取内容)
略
八.正则提取器(取出获取第一个接口的返回值token放在第二个接口中当作请求参数请求)
HTTP请求–>添加–>后置处理器–>正则表达式提取器–>引用名称(自定义)–>正则表达式(“head”:“(.*?)”)–>模板( 1 1 1)–>匹配数字(0)–>缺省值(null)
在新建一个HTTP请求–>调用请求参数的值(${变量名})
九.对数据库进行压力测试
一个JDBC的配置文件 连接库 配置账号密码
一个JDBC request 增删改查
测试计划–>浏览(输入数据库jar包位置) E:\jmeter\jmeter\apache-jmeter-4.0\bin
线程组–>添加–>配置元件–>JDBC Connection Configuration(连接数据库)–>Variable Name for created pool(设置的名称)–>Max Number of Connections(最大连接数据库的数量)–>Max Wait(最大等待的时长)–>Time Between Eviction Runs(打开运行的时间)–> Database URL(jdbc:mysql://127.0.0.1:3306/库名)–>JDBC Driver class(com.mysql.jdbc.Driver)连接数据库的驱动–>Username(用户名)–>Password(密码)
线程组–>添加–>Sampler(采样器)–>JDBC Request–>(绑定设置的名称必须一致)–>(输入sql语句进行测试)
类型:
Query Type(Select Statement) 查询语句
仅支持测试 select语句,并且一次只能测试一条
Update Statement 更新语句
支持测试非select语句,并且支持测试多条,若其中夹杂select语句,自动忽略,若第一条语句为select语句,报错
Callable Statement 所有语句
只要语法正确,任何语句,再多的条数都能支持
1.?serverTimezone=UTC(添加到 Database URL后面) 解决时间不统一的问题
2.allowMultiQueries=true 支持允许多条查询
3.有的时候还需要把服务关掉(mysqlzt禁用) 否则获取不到数据库元素
十.jmeter对服务器和数据库进行性能测试:
linux服务器性能测试:
下载对应的插件(JMeterPlugins-Extras.jar和JMeterPlugins-Standard.jar)
将serveragent插件监控服务器资源部署在对应测试的服务器上(linux),启动服务(linux上./startAgent.sh)
然后对外暴露4444端口(/sbin/iptables -I INPUT -p tcp --dport 4444 -j ACCEPT /etc/rc.d/init.d/iptables save —将修改永久保存到防火墙中)
接着在jmeter上添加监听器( PerfMon Metrics Collector),在里面添加需要监控的指标(cpu,内存…)其中对应的服务器是监控的服务器的ip和端口4444
添加聚合报告和查看结果树
最后在线程组中进行不断添加虚拟用户进行增压,查看对应的服务器中cpu和内存以及其他性能指标的变化
服务器(window):
下载对应的插件(JMeterPlugins-Extras.jar和JMeterPlugins-Standard.jar)
将serveragent插件监控服务器资源部署在对应测试的服务器上(window),启动服务(双击startAgent.bat)
接着在jmeter上添加监听器( PerfMon Metrics Collector),在里面添加需要监控的指标(cpu,内存…)其中对应的服务器是监控的服务器的ip和端口4444
添加聚合报告和查看结果树
最后在线程组中进行不断添加虚拟用户进行增压,查看对应的服务器中cpu和内存以及其他性能指标的变化
数据库性能测试
在测试计划中添加数据库的jar包
添加线程组模拟虚拟用户进行并发测试
添加JDBC的连接配置,进行数据库的基本配置url/ip/端口/库名/参数,以及选定数据库的驱动,我们使用的是mysql测试,那么选择MySQL的驱动(oralce则选择对应的oralce的驱动),
最后是连接数据库的用户名和密码添加JDBC的请求,添加变量名称和JDBC的连接配置的变量名称一致,那么两者能进行关联,选择不同的查询类型添加语句进行数据库操作
应用的有csv进行批量数据的操作(使用csv模拟多个用户登录…)
charles使用:
CHarles只能抓取网页的
web端抓包流程:
配置ssh证书----设置代理—配置SSL Proxy Setting添加80和443----打开百度----右键抓包到的网址,Breakpoints设置断点
----Proxy点击Breakpoint Settings写入抓包地址(Query用*)----点击Breakpoints可以编辑Reauest----点击Excute刷新浏览器 Abort停止断点
遇到问题怎样看是前端问题还是后端问题
1,用chalse看返回结果是5是后台 ,4前端,请求问题是前端,响应是后端
2,查看日志,在日志里面看到空指针,内存溢出,oom这些就是后端的问题,如果界面上出现undefund的一般是前端的问题
一、修改request请求参数值
- 在接口处鼠标右击 选择breakpoints(断言)
- 点击proxy(代理)选择Breakpoint settings(设置断点)
- 点击钻到的接口 修改query(参数)为* request勾选 输完值 点击ok保存变量
- 重新请求接口 edit request(编辑要求) 在 channelID(通道) 点击具体值 修改 添加或删除
- 关掉 break point(断点) 点击 abort(终止)
二、修改request请求参数值
- 选中接口对应的request值 点击rewrite按钮 (小铅笔)
- 选中需要修改的参数 点击对应值 对其修改即可
- 执行后刷新 看返回结果的展示情况 (execute)
- 点击execute(执行)之后 看新的response
三、修改返回值 response
- 选中接口右击 选择break points(断点)
- 点击proxy(代理)选择break points settings (设置断点)
- 点击接口修改query(参数)为* request勾选 点击ok保存
- 重新请求接口 点击edit request 返回值所有的字符都可以修改
- 刷新页面 请求接口 点击abort(终止)
四、修改返回值 request
-
复制response内容 保存为TXT文件 存放到本地 编码的格式为’utf-8’ 否则可能会出现乱码
-
接口返回值右击 选择 save response 后 选择response
-
选中需要修改的response值的接口后右击 选择maplocal功能 query(参数)修改为 *
(map to 下 local path 填TXT文件的绝对路径)
-
修改TXT文件中 需要修改的字段值
-
重新请求此接口
-
完毕后 点击 tools(工具) 点击 map local 取消勾选的 enable map local
五、弱网测试
- 点击proxy(代理) 选择 throttle settings(节流阀调整) 勾选 enable throttling(使用节流阀) 修改 宽带: 上限值 下限值 带宽的利用率:上限值 下限值 数据传输往返延迟时间值 最大传输字节量 可靠性 网速不稳定性的占比等 点击ok保存
- 打开throt setting 版本3.0是红旗 4.0的是乌龟
六、模拟 404/403 返回值
- 点击tools(工具)选择blacklist(黑名单)
- 允许启动黑名单功能 选择接口返回值的形式 添加接口地址并保存
- 选中需要返回404/403的接口 点击ok再次请求
七、屏蔽web网页的抓包信息
- 点击proxy(代理) 选中或取消 Windows proxy macOS proxy
八、抓包结果列表 只展示关注的接口
- 点击view 选择focused hosts
- 点击 add 添加 协议 域名 端口号
- 将 关注的接口 勾选 点击 `ok 保存
- 重新抓包
九、https抓包
- 点击help(帮助) 选择SSL Proxying 点击 install Chales root
- 移动端下载证书
- 点击 proxy 选择 ssl proxying setting 添加主机 为* (所有) 端口号 点击 ok 保存
- 勾选添加的接口 勾选 Enable ssl proxying 点击 ok
十、接口压力测试
-
选择需要进行测试的接口 右键 选中repeat advance(重复之前)
-
填写 迭代次数 每次迭代的并发量 每次迭代中多个请求之间的间隔时间
和每次迭代之间的间隔时间
3.勾选 use ranges (使用间隔时间区间) 点击ok
mysql数据库
是存储数据库一个仓库,可以存储图片,视频,文字
常见的数据库
大型oracle,db2
中型mysql,sqlserver…
小型sqlite
mysql安装和卸载
停服务mysql
删除对应的文件夹
删除注册表(mysql)
mysql使用
1:黑窗口
2:使用工具 navicat
sql语句分类
数据定义语言DDL create,drop,alter,truncate
数据查询语言DQL select
数据操纵语言DML insert,delete,update
数据控制功能DCL grant 授权 ,revoke回收
字段
主键:primary key
自增:auto_increment
空:null
默认:default
唯一:unique
外键:foreign
…
类型
int
float
double
char 固定长度
varchar 长度变
text
date
time
datetime
…
– create DATABASE 77777 charset=utf8
– 使用数据库
– use 77777
– 创建表
– create table student(
– 主键自增长
– id int PRIMARY key auto_increment,
– sname VARCHAR(20),
– ssex VARCHAR(2),
– sage int,
– sscore FLOAT(4,2)
– )
– 单条添加
– INSERT INTO student (sname, ssex, sscore )VALUES( “张小”, “男”, 10.23 )
– 多条添加
– INSERT into student VALUES(0,“姓名”,“男”,2,19.23),(0,“姓名”,“男”,3,29.23)
------数据库添加字段
alter table 表名 add 字段名 约束(varchar(20));
------修改字段名
alter table 表名 change column 旧字段名 新字段名 新数据类型;
------修改表名
alter table 旧表名 rename to 新表名
------删除字段
alter table 表名 drop column 字段名
------删除表
drop table 表名
------删除库
drop database 库名
– 修改数据
– update 表名 set 字段=修改的数据(name =zhangsan) where 字段=值(id=1)
– UPDATE student set sname=“jingling” where id=4
– 查询(全查,条件查询,模糊查询,排序,分组)
– 全查
– select * from 表名
– select * from student
– 条件查询,查询id为1和2的数据
– select * from 表名 where id=1 or id =2
– select * from 表名 where id=1 or id =2
– select * from student where id BETWEEN 1 and 4
– 查询id为1,2,3,4的这4条数据
– select * from 表名 where id in(1,2,3,4)
– 查询第二条到第四条id的数据
– select * from 表名 where id BETWEEN 2 and 4
– select * from student where id BETWEEN 2 and 4
–模糊查询
–查询以小开头的名字
– SELECT * FROM student where sname like ‘小%’
–查询以小结尾的名字
– SELECT * FROM student where sname like ‘%小’
– 查询sname参数里面包含有小字的条目
– SELECT * FROM student where sname like ‘%小%’
– 升序 sscore参数升序排序
– select * from 表名 ORDER BY 升序的参数名
– select * from student ORDER BY aaaaa
– 降序 sscore参数降序排序
– select * from 表名 ORDER BY 降序的参数名 desc
– select * from student ORDER BY aaaaa desc
– 分组查询
HAVING + GROUP BY
select count(*) from student GROUP BY ssex HAVING sum(sscore)>=85
– 删除id为17的条目
– DELETE from student where id=17
– 删除sscore为10.23的条目
– DELETE from student where sscore=10.23
分组
select 字段,… from 表名 group by 字段,…
select sum(字段名) from 表名 group by 字段名 having sum(字段名) < 10 (查询某字段总和小于10的)
分页
select * from 表名 limit 0,2 (每页显示2个,第一个页面)
– 聚合函数
count()记录总条数
select count(*) from 表名
sum()所有值的总和
select sum(字段名) from 表名
AVG()平均值
select AVG(字段名) from 表名
max()最大值
select max(字段名) from 表名
min()最小值
select min(字段名) from 表名
删除
db.tablename.remove({‘name’:‘value’})
//删除表
db.tablename.drop()
//删除库
db.dropDatabase()
连接查询
inner join … on 等值连接
left join … on 左连接
right join … on 右连接
select 表A.字段1,表B.字段1 from 表A [inner | left | right] join 表B on 表A.字段2 = 表B.字段2
–多表联查:
Where 查询条件,内连接可以使用
on内外连接时候用 查询的意思
取别名 as 或者是不写
in查询某值是否在某条件里
多表联查 2表
SELECT c.classroom,s.sex FROM class as c INNER JOIN student s on c.id=s.id
多表联查 3表
SELECT c.classroom,s.sex,sc.school FROM class as c INNER JOIN student as s on c.id=s.id INNER JOIN school as sc on c.id=sc.id
-----子查询(一个表的查询的结果作为另一个表的条件)
SELECT cid from school where school =‘北京’
SELECT classroom from class where cid=(SELECT cid from school where school =‘北京’)
详细解释
多表联查
内连接 inner join
外连接 left join ,right join
全连接 full join (不适用mysql,使用oracle) = left join+ union+right join
--------sql语句
select s.字段,c.字段,,, from student(表1) as s inner join(left join ,right join) class(表2) c on s.字段 = c.字段
------内连接
select s.sname,s.sex,c.classroom from class c INNER JOIN student s on s.sid = c.sid
SELECT sc.school,c.classroom from school as sc INNER JOIN class as c on sc.cid = c.cid
---------左外连接
select s.sname,s.sex,c.classroom from class c left JOIN student s on s.sid = c.sid (左边为主表,右边有则填充,没有用null)
---------右外连接
select s.sname,s.sex,c.classroom from class c RIGHT JOIN student s on s.sid = c.sid (右边为主表,左边有则填充,没有用null)
----------全连接(不适用mysql)
select s.sname,s.sex,c.classroom from class c full JOIN student s on s.sid = c.sid
-------全连接
select s.sname,s.sex,c.classroom from class c left JOIN student s on s.sid = c.sid UNION select s.sname,s.sex,c.classroom from class c RIGHT JOIN student s on s.sid = c.sid
------多表联查(后面的id是,3个表里面都有的id会显示出来)
select c.classroom,st.sname,st.sex ,sc.school from class as c INNER join student as st on c.sid = st.sid
INNER JOIN school as sc on c.cid = sc.cid
–子查询:
(子查询比较耗时,子查询的响应时间比较繁琐,响应时间比较慢,可能会超过8秒,我们在测试接口的时候有一个258原则(就是请求时间不超过2秒是非常好的,2到5秒还可以,超过8秒就不能接受啦,如果超过8秒的就得找开发优化数据库里面的数据啦))
select id from class WHERE id=2
select sname from student WHERE id=(select id from class WHERE id=2)
数据库卸载:
卸载
mysql卸载的话要卸载干净,不卸载干净的话下次安装不上去(卸载的时候先先给mysql的服务给停啦)
1,停服务
2,删除对应的文件夹
3,删除注册表
然后还有注册表以及mysql全部文件夹都要全部删掉
比较坑的是到公司用别人的电脑,人家离职啦,没给卸载干净,然后自己安装一直安装不上
WEB测试点:
页面:页面清单是否显示,是否显示完整正确
提示信息:操作页面成功,失败提示
危险操作,重要操作,比图删除某些重要信息
容错性:非空,唯一性,特殊字符
权限部分:
功能权限:用户可以使用哪些功能,不能使用哪些功能
数据权限:指定用户可以处理哪些功能,不能使用哪些功能
操作权限:在逻辑关系上,操作前后顺序,数据处理情况
兼容性:
操作系统兼容性:windows windows7 win8 win10 mac Linux
浏览器兼容:IE 8,9,10 google 火狐 QQ浏览器,360 搜狗 苹果的safari
安全性:
1.用户验证:登陆密码验证,
用户超时,登陆超过30分钟,重新登陆(安全设置,cookie过去时间超过30秒) 权限验证
安全 sql注入 xss攻击 加密
业务安全,账号 资金 超时验证
jenkins持续集成:
安装插件 安装测试报告插件
配置变量
配置jdk和ant
创建项目------写入名字------自由风------设置触发检查时间------配置git,ant,jdk
开发修改提交最新的代码,jenkins会一直监测git的提交状态,设置测试报告多久检测一次的时间,他会不断的监测,就比如半夜12点左右,想看最新的开发包,这时候你还得找开发打包,用持续集成的话,他根据你设定好的时间来监测开发在git中提交的最新的代码,给你发最新的包,你随时想测试最新的包,就在邮件中下载就可以啦
水杯测试用例:
界面,功能,安全,可靠,可移植,兼容,易用
1,界面测试:和原型图UI图是否一致 ,颜色字体大小,位置,是否正确
2,功能测试:用水杯装水看漏不漏,水能不能被喝到
3,安全性:杯子有没有细菌,有没有毒
4,可靠性:被子从不同高低扔下来的损坏程度
5,可移植性:杯子在不同的地方,温度等环境下是否都可以正常使用
6,兼容性:被子是否能容纳果汁,白水,酒精,汽油等
7,易用性:被子是否烫手,是否有防滑措施,是否方便喝水
8,用户文档:使用手册是否对杯子的用法,限制,使用条件都可以正常使用
9,疲劳测试:将杯子盛水放24小时以上检查泄露时间和情况,将杯子盛汽油放24小时以上检查泄露时间和情况
10,压力测试:用跟针在针上面不断施加重量,看压强多大能穿透
11,跌落测试:杯子里面有东西,在多高情况下扔下去不破
版权声明:本文标题:超级无敌的测试面试总结 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1729424089a1200741.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论