目的:
原则:
用户需求-需求分析-概要设计-详细设计-编码-单元测试-集成测试-系统测试-验收测试

相同点
不同点
概念:所谓的架构就是用来指导我们软件开发的一种思维,目前最常见的就是BS/CS。
区别:
${参数名}的方式引用,接下来还要对其他参数进行参数化,构造各种正常和异常的数据,我们先在本地创建一个txt文档,把参数填写到文档里面,在Jmeter中添加一个csv文件设置,填写好txt文档的路径,然后在请求参数中使用Json提取器把token值关联出来,然后在下单接口中使用${参数名}的方式引用;接下来添加断言,检查服务器返回的结果和预期结果是不是一致的。项目启动后,测试人员尽早找开发人员拿到接口文档,获取接口文档后进行接口用例的编写和调试,完成后部署到持续集成的测试环境中,进行接口的日常监控,定期对接口脚本的维护更新,接口异常的处理。
首先要看有没有接口文档,如果有文档的时候按接口文档去做,没有的话就去抓包。
我们一般使用postmian以及jemter.
没有接口文档的情况下,要先创建一个线程组,指定并发的线程数量,在指定测试的接口,创建相应的监听器,(如,表格结果,结果树,以及聚合报告信息)通过监听器来进行监听测试是否通过以及接口存在什么问题。
先要有需求评审(有开发人员---产品经理---测试人员---项目经理)需求确定(出一份确定好的需求文档)开发设计文档(开发人员在开始写代码前就能够输出设计文档)制定测试计划---写出测试用例---发给开发人员与测试经理看一下---接到测试版本---执行测试用例---提交Bug---交给开发人员修改---回归测试。
首先要从正确性,一致性,可行性,必要性,可跟踪性,分配优先级,可测性,可修改性考虑:
正确性:每一条需求都必须准确的陈述其要开发的功能。
一致性:必须与其他软件需求或高层需求不相矛盾。
可行性:其每一项需求都必须是已系统和环境的权能和限制范围可以来实施的。
必要性:每项需求都是用来授权你编写文档的“根源”,要使每项需求都能回潮至某项客户的输入。
可测性:每项需求都能通过设计测试用例或其他的验证方法来进行测试。
可修改性:每项需求只应在SRS中出现一次,这样更改会容易保持一致性。
可跟踪性:在每项软件需求与它的根源与设计元素,源代码,测试用例之间建立起链接,而这种可跟踪性要求每项需求都必须以一种结构化的,粒度好(fine-grained)的方式编写
分配优先级:应当对所有的需求分配优先级,如把所有需求都看作同样重要,那么项目管理者在开发或节省预算或调度中丧失控制自由度

目的:明确测试任务与测试方法,保持测试实施过程的顺畅沟通。
内容:测试目的、测试资源、测试范围、测试风险、人员分工、测试策略、测试准则、测试进度、提交测试文档。
搭建过web测试环境 app测试环境等
个人PC(windows)可以搭建测试环境,但是由于个人PC硬件和软件的局限性,我们一般不使用其搭建测试环境,但如果是自己做模拟实验是没问题的。但是在企业中我们一般都不使用windows平台搭建服务器,而是选择Linux平台。这是因为我们经常选择Linux平台作为服务器的操作系统。搭建测试环境
如果你需要搭建的测试环境是刚装的Linux操作系统,
通常测试环境包括JDK环境,Tomcat环境和MySQL环境
下边是安全配置的步骤,大家可以理解,不用强背...,面试的时候,可以说就从网上找一份文档,按照文档进行配置
1.安装jdk
如果有自带,先卸载再装
1.把包复制/usr/local
2.解压
3.配置环境变量
export JAVA_HOME=/usr/local/jdk1.7.0_71
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
4.检查java是否安装成功
java -version
2.安装tomcat
1.把下载的tomcat包复制/usr/local
2.解压
3.在tomcat/bin目录执行startup.sh文件
启动服务
在浏览器中连接:IP:8080
4.如果连接不上,但tomcat又是显示启动OK,检查firewall
路径为 /etc/sysconfig/iptables,将8080端口开启
5.重启服务
3.安装数据库
数据库一般安装mysql和oracle多一些
首先下载相应的数据库安装包
mysql安装比较简单,可以使用源码安装,也可以使用yum在线安装,在这里简单地介绍一下yum在线安装
用yum在线安装
1. rpm -qa|grep mysql --检查Linux是否有存在的mysql
2.如果有mysql,卸载
rpm -e --nodeps mysql
3.安装
yum install mysql-server mysql mysql-dev -y
4.安装成功后,启动服务
service mysqld start
service 服务名 restart/start
5.直接输入mysql 进入到数据库
以上的只会在干净的操作系统上进行安装,一般来说只需要安装一次
项目开始前,我们会先熟悉需求,画好流程图,保证整个流程都覆盖全面来讲解一下自己对测试点的理解,用例编写完之后,再进行用例的评审,看看测试点有没有用遗漏,测试场景是否覆盖完全。
开发环境:是在编码阶段,一般我们的代码基本上都是在开发环境中,不会再生产与测试环境,如操作系统,web服务器,语言环境,php,数据库等等。
测试环境:项目完成后,找Bug,以及修改Bug。
生产环境: 项目数据前后端已经疏通,部署到阿里云上有客户去使用以及访问,网络正常运行就好了。
面试宝典P140
常用的自动测试框架工具:Selenium、Appium、unittest、pytest等。
通过id、name、class_name、xpath、css_selector、link_text、partial_link_text、tag_name定位元素。
一般,如果有id就使用id,然后使用css或者xpath来定位,当然定位的时候,需要在浏览器里边安装firebug firepath来抓取页面元素对应的xpath信息。
用户验证,用户权限管理,系统数据的保护
工具上使用:Fiddler、Charles这两个工具
Fiddler:
A. 设置Http代理,设置端口号,在手机上设置与fiddler在同一网段上,设置代理ip,设置代理端口,手机上的请求就能获取到了。
B. 抓取请求查看,可以过滤,找到自己域名下的请求,通过分析请求地址,请求参数,响应结果来查找问题。
Https包怎么抓?
A. http与Https协议区别在于Https多了一个ssL协议,更加安全,默认端口是443,而http默认端口是80.
B. 抓取Https时,需要获取申请证书,在fiddler与charles两个工具中,可以模拟下载966证书,下载后,在手机上访问代理服务器的ip与端口,下载证书,就可以抓取到HTTPS的请求了。
功能测试、用户体验测试、性能测试、UI测试、兼容性测试、安装测试、文档测试、稳定性测试等。
在公司中大部分是做的功能与接口测试。
目的:主要是为了开展测试用例评审工作提供指引,规范测试用例管理工作。
流程:
测试用例是否按照公司定义的模板进行编写的;
测试用例的本身的描述是否清晰,是否存在二义性;
操作步骤应与描述是否相一致;
测试用例是否覆盖了所有的需求;
测试用例是否具有可执行性
测试用例应有正确的名称和编号,
测试用例应标注有执行的优先级。
200:请求发送成功。
302:代表重定向。
400:客户端发送的请求语法错误。
401:请问的页面没有授权。
403:没有权限访问这个页面。
404:没有这个页面。
500:服务器内部异常。
我们当时做到1500个并发用户的时候,查询功能的响应时间超过了性能指标2秒多,原因是有几个表的索引建得不合理导致的,我们当时做到1500并发用户后,就没再继续增加用户量了。
在性能测试结束之后,我们会根据性能测试的结果,查看在整个性能测试过程中,网络的吞吐量是多少,如果网络的吞吐量占到了服务器的70%以上,我们就认为网络存在瓶颈,通常会增加带宽或者压缩传输数据。
响应时间不达标的话,我们会根据性能测试结果先检查看下是否是服务器带宽存在问题,如果带宽存在瓶颈,则会考虑增加带宽或者压缩传输数据,如果带宽没有问题的话,我们会从服务器上导出日志,开发一起讨论分析是哪个地方导致响应时间过长,确定问题后,就提单给开发修复,修复好了就进行回归测试。
CPU使用率不达标,我们会从服务器上导出日志,分析是哪个地方导致CPU使用率不达标,如果分析不出来,就叫上开发一起讨论,确定问题后,就提单给开发修复,修复好了就进行回归测试。
UI测试,功能,性能测试,安装卸载测试,软件升级测试,登陆测试,安全性测试,消息推送,前后台切换,兼容性测试,网络环境测试,monkey测试。


方法:等价类划分法、边界值分析法、场景法,因果图、错误推测法
解释:
App的性能分为服务器端的性能和手机端的性能。 服务器端的性能,我们用Jmeter工具进行测试的,和web的端性能测试方法一样的。我们是用monkey做手机端App的稳定性测试的,使用monkey跑10万次,看它会不会出问题,如果出了问题,我们再定位原因,具体的做法是这样的:在跑monkey前,先使用adb logcat -c清空手机的logcat日志接下来,使用adb logcat -v time获取logcat日志并导入本地文件使用monkey运行被测应用:adb shell monkey -p 包名 -v 10万次 并将执行结果导入到本地测试完成后查看monkey日志,如果说它跑的次数跟我设的次数不一样.就说明monkey中途跑失败了。那我就要去看看monkey日志中有没有crash或者anr的关键字,如果有还需定位到是什么原因导致的anr或者crash的问题。并且将相关日志和logcat日志与进程号提交给开发定位,如果是anr的问题,还需要从安卓中获取/data/anr/traces.txt文件提交给开发定位。
SVN是Subversion的简称,是一个开放源代码的版本控制系统,说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的
SVN需要部署服务端和客户端,我们公司服务端部署在服务器上,我们只需要在自己的电脑上安装客户端(小乌龟),服务端给分配好账号密码和权限,并且给我们仓库的地址,我们就可以对仓库中的文件或代码进行checkout update commit等操作,当然共同协作开发可能还会有冲突发生,这就需要处理冲突
当然除了SVN我会使用GIT, Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 是一个开放源码的版本控制软件。Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
在使用GIT都是使用指令进行操作:
git config --global user.name "DashShi"
git config --global user.email 805256908@qq.com
git add . 把这个文件夹下面所有的文件都添加到库
git add abc.txt 把某一个文件添加到库中
git status -s 可以查看添加的状态
git log
git log --pretty=oneline 简略信息查看日志
//远程仓库存在,把本地的代码推送到远程需要执行
git push -u origin master
git clone "url"
线程阻塞的,内存不足,CPU满负荷(由于现在的手机基本都是8核CPU,所以基本不会出现CPU满负荷的情况)。
我们的电脑(c端)上运行自动化测试脚本,调用的是appium的webdriver的接口,appium服务器(s端)接收到我们client上发送过来的命令后,他会将这些命令转换为UIautomator认识的命令,然后由UIautomator来在设备上执行自动化。
数据库语言最常SQL (结构化查询语du言)
创建表:create table user(id int(11) primary key auto_increment,name varchar(20),age int(4),sex varchar(10),);
增:insert into user(name,age,sex) values(?,?,?);
删:delete from user where name=?;
改:update user set age=?,sex=? where name=?;
查询所有:select * from user;
根据名称查找:select * from user where name=?;
多表联查:
select * from customer,orders;
select * from customer,orders where customer.id=orders.customer_id;
select * from customer c left join orders o on c.id=o.customer_id;
select * from customer c right join orders o on c.id=o.customer_id;
子查询:老师和学生
//查询李老师所教的学生
select id from teacher where name=’李老师’
select student_id from teacher_student where teacher_id=id
select * from student where id in(select student_id from teacher_student where teacher_id =(select id from teacher where name='李老师'));
//查询张三的所有老师
select * from teacher where id in(select teacher_id from teacher_student where student_id=(select id from student where name='张三'));
如果用sql语句,数据处理比较快,处理后传输的数据量稍大,由123变成了汉字。
在代码中处理,传输的数据量小点,处理速度取决于代码怎么处理。
如果数据量不大,两种方法区别不明显,建议用sql语句。
内关联是求交集
外观连是以主表为标准,去附表找需要的信息
显示,管理执行中的程序 就是任务管理器
#ls –bailR /home >;files.txt
#diff filesold.txt files.txt
目录操作
cd usr/ 切换到该目录下usr目录
cd .. 切换到上一层目录
cd / 切换到系统根目录
mkdir 目录名称 创建目录
ls 目录名称 查询该目录下所有的目录和文件
ls [-a] 目录名称 查询该目录下所有的目录和文件,包含隐藏文件
ls [-l] 目录名称 查询该目录下所有的目录和文件的详细信息
find / -name 目录名称 查找/root下的目录(文件)
mv 目录名称 新目录名称 修改目录名称
mv 目录名称 目录的新位置 剪切
cp -r 目录名称 目录的目标位置 拷贝
rm -rf 目录 强制删除目录
文件操作
touch 文件名称 创建空文件
cat/more/less/tail 文件 查看文件内容
tail -f 文件 动态查看/实时查看文件(日志)
grep 要搜索的字符串 要搜索的文件 关键字搜索
vi/vim 文件 修改文件内容
rm -rf 文件 强制删除文件
文件的打包
tar -zcvf 文件名.tar 要打包的文件
文件的解压
tar -xvf 文件名.tar
扩充:将文件解压到固定位置
tar -xvf 文件名.tar -C 指定解压的位置
查询当前所在位置
pwd
查看进程
ps -ef | grep 进程名称(tomcat/mysql)
杀死进程
kill -9 进程pid
查看端口号
netstat -an | grep 端口号(3306)
查看服务器ip
ifconfig
查看网络是否能正常使用
ping 外网地址 查看是否能访问外网
ping 内网ip 查看是否能访问内网
权限命令
chmod 777 文件 赋权
查看cpu
top
查看磁盘信息
df -h
查看内存信息
free
关机命令
shutdown -h now 立刻关机,其中now相当于时间为0的状态
shutdown -h 10:23
shutdown -h +10 系统再过十分钟后自动关机
重新启动
reboot 重新启动操作系统
Tar -n logcat 查看系统日志
tar -zcvf 文件名:压缩
tar -xvf 文件名 :解压
不能,脚本需要通过windows调试好后,才能在Linux上运行,运行的时候,只能通过non GUL形式进行启动jmeter,但需要注意的是,csv文件在windows上与LInux上要统一路径,最好使用相对路径,放到统一目录下边。
Adb install(apk的文件路径) 安装软件到手机或者模拟器
Adb uninstall(包名) 卸载手机或模拟器上的某款软件
Adb devices 查看与当前电脑连接的移动设备
Abd adb start-server 启动
Adb adb kill-server 杀死
Adb logcat 查看日志
Adb logcat -v time process >
adb install -r xx.apk覆盖低版本的
adb install -r -d 覆盖高版本的
adb shell dumpsys cpuinfo 查看手机cpu的使用情况
adb shell getprop|findstr dalvik 手机系统自己运行的内存使用
adb shell monkey -p 包名
adb-shell--ignore-crashes 忽略崩溃
adb-shell--ignore-timeouts 忽略延时
adb-shell--ignore-throttle 延时毫秒值
adb-shell--pct-touch--pct-motion 触摸与滑动事件的比例
adb shell monkey -p com.example.login --ignore-crashes --ignore-timeouts --throttle 100 --pct-touch 50 --pct-motion 50 -v -v 1000 >c:\login\c.txt
Postman是一款功能超级强大的用于发送 HTTP 请求的 Chrome插件 。做web页面开发和测试的人员应该是无人不晓无人不用!其主要特点 特点是可以创建和发送任何的HTTP请求。
大型的、用户群体多的网站都需要做浏览器兼容性测试,需要测试主流的浏览器(除特定要求的浏览器以外)
测试的内容:一般是页面的排版,页面格式,字体,颜色,下拉菜单,复选框等测试(UI:CSS,HML,Js在不同浏览器下的表现)
再就是对功能进行检查
为什么选择这几个浏览器?
原因:以浏览器内核分类浏览器进行测试
常见浏览器及四大内核:
IE、360(兼容模式)、搜狗(兼容模式)(Trident内核)
Firefox(Gecko内核)
Chrome、360(极速模式)、搜狗(极速模式)(Blink内核)
Apple Safari(WebKit内核)
一般测试手机兼容性的时候会考虑到手机的型号,分辨率以及安卓版本号,一般常用的手机型号如:华为,锤子,小米,魅族等,一般碎片化会严重,从Android6.0到Android10.0的版本是不一样的,而最近的版本号已经到10了,也就是AndroidQ,它是协助开发者利用5G,折叠屏,无框屏,设备内置Al等最新技术继续创新,同时确保用户安全,隐私及数字健康。向分辨率这块大部分是1920*1080,一般会买真机去测。。
性能测试是一个较大的范围,实际上性能测试本身包含了性能、强度、压力、负载等多方面的测试内容。
压力测试是对服务器的稳定性以及负载能力等方面的测试,是一种很平常的测试。增大访问系统的用户数量、或者几个用户进行大数据量操作都是压力测试。
负载测试是压力相对较大的测试,主要是测试系统在一种或者集中极限条件下的相应能力,是性能测试的重要部分。
100个用户对系统进行连续半个小时的访问可以看作压力测试,那么连续访问8个小时就可以认为负载测试,1000个用户连续访问系统1个小时也可以看作是负载测试。
实际上压力测试和负载测试没有明显的区分。测试人员应该站在关注整体性能的高度上来对系统进行测试。

网络抓包
移动端抓包
证书安装
断点
过滤
模拟慢速网络
修改网络请求
压测服务器
模拟404、403
做性能需求分析,挑选了用户使用最频繁的功能来做性能测试,比如:登陆,打开系统首页,搜索,提交订单,确定性能指标,比如:事务通过率为100%,90%的事务响应时间不超过3秒,CPU和内存的使用率为70%以下。
搭建性能测试环境,准备好性能测试数据。
使用Jmeter开发优化脚本,包括:参数化,断言,关联等。
设计性能测试场景,我们这个项目做了单用户单功能循环200次的基准测试,然后使用1500个用户,执行30分钟的负载测试,看系统有没有性能瓶颈;
我们搭建了分布式压力测试环境进行测试,每台压力机并发500个用户,并监控linux服务器的CPU,内存,IO。
分析性能测试结果,如果有性能瓶颈,收集相关的日志提单给开发修改。
开发修改好后,回归性能测试,然后输出性能测试报告。
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r
我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel
只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您
我有:When/^(?:|I)follow"([^"]*)"(?:within"([^"]*)")?$/do|link,selector|with_scope(selector)doclick_link(link)endend我打电话的地方:Background:GivenIamanexistingadminuserWhenIfollow"CLIENTS"我的HTML是这样的:CLIENTS我一直收到这个错误:.F-.F--U-----U(::)failedsteps(::)nolinkwithtitle,idortext'CLIENTS'found(Capybara::Element