├── _coverpage.md ├── docs ├── _coverpage.md ├── 1-1-文档目的.md ├── 14-19-20并发40次循环怎么做?.md ├── 17-4-Python区分大小写吗-.md ├── 6-8-如何查看端口是否被占用.md ├── 7-10-如何进行多表查询.md ├── 2-13-是怎么考虑做软件测试呢-.md ├── 9-33-jmeter如何做post请求格式接口.md ├── add.gif ├── 7-4-你们用的什么数据库连接工具.md ├── 9-27-jmeter中-cookies如何添加.md ├── 9-28-jmeter中如何添加-header信息.md ├── 11-2-什么是自动化测试-.md ├── 11-6-自动化测试用例的来源.md ├── 14-15-做井发你们一般cpu和内存是多少-.md ├── 2-7-对于一个新的工具你有什么看法.md ├── 6-9-data目录下找到所有txt的文件的命令.md ├── 8-5-请求方式有哪些-.md ├── 9-17-jmeter环境搭建.md ├── 9-31-jmeter中https证书如何处理.md ├── 13-8-yield的作用是什么.md ├── 14-10-当你服务器满了之后,你们吞吐量和响应时间怎么变化的.md ├── 2-12-多久能入职-.md ├── 3-13-界面中的乱码可以是哪里导致的-.md ├── 7-9-查询数据库的前100行数据,你sq怎么写.md ├── 9-25-jmeter如何去做get请求接口.md ├── 10-9--jmeter中对于json数据如何提取信息.md ├── 11-38-如何读取表格中总的列数跟行数.md ├── 3-20-如何测试万分之一概率问题.md ├── 8-11--TCP模型.md ├── 11-31-如果元素经常变动你怎么做-.md ├── 11-45-断言的目的是什么-.md ├── 9-42--requests中https证书如何处理.md ├── 11-5-自动化实现的比例,1-2年。.md ├── 11-50-自动发送邮件里面包含哪些内容.md ├── 7-12-数据库测试有没有发现什么问题.md ├── _navbar.assets │ └── 图片1.png ├── 17-24-类的继承与多态意思.md ├── 2-14-是否有考虑往开发方面测试-.md ├── 3-32-产品上线评判的标准-.md ├── 7-11-in与-exist的区别.md ├── 1-2-离线版本说明.assets │ ├── pdf.png │ └── word.png ├── 10-14--pytest如何做断言-.md ├── 3-25-如何写好一个测试用例.md ├── 11-49-划分模块的好处有哪些.md ├── 14-4-这个测试的环境配置,如转速度.md ├── 17-26-如何获取字典中的所有键-.md ├── 3-35-什么是多分支开发和单分支开发-.md ├── 9-35-requests如果做get请求,数据保存格式哪二种.md ├── 1-3-微信小程序刷题工具介绍.assets │ └── 小程序.jpg ├── 11-32-自动化如何破解验证码.md ├── 14-23-压测返回数据报错,你怎么去定位的.md ├── 3-21-为什么要写测试用例-.md ├── 10-6-你查询出来返回结果是密文,密文你怎么测试.md ├── 14-17--5000个人抢购,只能50个人能抢到,你怎么设计并发数的.md ├── 14-20-我想从200慢慢加载到300,到400怎么做.md ├── 14-27-并发用户数跟响应时间与吞吐的关系.md ├── 3-10-提交bug包含哪些内容.md ├── 3-2-如果需求不明确的话你怎么办-.md ├── 8-10--OSI七层网络模型.md ├── 9-10--什么是api接口测试.md ├── 9-8--你们什么时候测试接口.md ├── 10-8--jmeter如何进行参数化,参数化类型包含哪些.md ├── 11-47-闭环有哪些,闭环的目是什么.md ├── 11-8-你们自动化覆盖率有多少-.md ├── 14-26-如果用户并发要慢慢加载,你怎么设置的.md ├── 15-21-公众号,小程序比app更火,你怎么看.md ├── 17-1-一个变量没有定义报什么错误.md ├── 17-6-列表和字典有什么区别-.md ├── 2-11-你的期望薪资是多少-.md ├── 2-16-说一下上一个公司背景-.md ├── 2-17-超过26岁女孩子,目前有没有打算结婚.md ├── 2-6-你最近测试的论坛和网站是什么-.md ├── 3-3-有哪些需要评审,哪些人在.md ├── 3-37-功能测试重复测试比较高,怎么看待这个问题-.md ├── 4-14-你这个项目做了多久--你这个项目现在的用户里有多少--活跃量多少-.md ├── 11-3-什么样的项目合适做自动化(至少三个).md ├── 3-26-什么是冒烟测试--在什么时候进行冒烟测试-.md ├── 11-41-数据库返回的数据格式是什么类型的格式.md ├── 3-12-对应无法重现bug,应该怎么处理-.md ├── 3-33-测试过程中,发现很多用例重复的,有的人认为没必要再测,你怎么看-.md ├── 10-15--patent中如何去调取其他用例中返回的参数-.md ├── 3-22-那你们测试用例是怎么编写的.md ├── 7-7--having是干嘛的-.md ├── 14-18-微信群里面发送红包,5000个人群,只能3000个人能抢到,你怎么设计并发数的峰值.md ├── 17-20-回文数.md ├── 3-38-项目同时发布,你怎么处理-.md ├── 3-7-如何提交一个好的BUG.md ├── 9-4--接口测试的流程.md ├── 10-3-假如公司想要做自动化,让你去做,你会从那些方面考虑入手-.md ├── 14-25-如果要做万并发,你怎么做.md ├── 15-22-微信开发者工具如何使用.md ├── 3-28-和开发沟通。是怎么沟通的.md ├── 3-29-测试中有哪些风险.md ├── 9-19-jmeter原理是什么.md ├── 9-30-jmeter-中如何去连接数据库.md ├── 3-39-你们开发转测试怎么转的.md ├── 6-2-Linux是什么工具连接的,-Linux版本是多少.md ├── 14-21-需要插入500条数据,你怎么插入.md ├── 21-2-你组内有一个技术比你牛逼年轻的组员不服你,你会怎么处理.md ├── 3-24-测试报告中测试的结论是什么-.md ├── 3-34上线后有没有另外的测试用例在生产环境里测试.md ├── 6-4-监控资源命令用到哪些.md ├── 14-5-性能测试计划有哪些内容.md ├── 2-8-你做了3年测试收获,你的测试心得.md ├── 7-8--where与-having的区别-.md ├── 8-12--TCP和UDP的区别-.md ├── 1-3-微信小程序刷题工具介绍.md ├── 13-9--pytest运行用例,用例命名规则有哪些-.md ├── 17-9-列出5个-python标准库-.md ├── 20-3-大概给我讲下抓包的原理-.md ├── 8-13-tcp的三次握手是怎么实现的-.md ├── 10-4-你写了多少接口自动化用例.md ├── 11-40-如何获取数据库返回的所有,一行,前5行.md ├── 2-10-以前在哪里上班,公司地址,测试多少人,开发多少人.md ├── 9-26-meter如何做json数据格式的接口.md ├── 10-7-http如何进行代理录制接口.md ├── 11-37-如何去读取表格中一行,一列数据,具体数据.md ├── 13-5-pytest框架如何去运行上次失败的测试用例.md ├── 17-12-python内建数据类型有哪些-.md ├── 17-16-然后现场出了一个-Python题目1689年到2019年打印出所有的闰年.md ├── 3-27-回归测试策略.md ├── 9-34--如何搭建-python+-requests接口测试环境.md ├── 9-40--requests中如何添加-cookies.md ├── 20-13-你测试数据是从哪里获得-怎么获得的,假如不告诉你,你怎么处理-.md ├── 7-5-左连接与右连接有什么区别.md ├── 9-41--requests中如何添加-headers信息.md ├── 15-4-adb的作用的-.md ├── 17-5-如何获取字典中的所有键-.md ├── 3-36-兼容性测试你们是怎么测的--app与web.md ├── 9-11--什么情况下开展接口测试-.md ├── navbar.md ├── 2-4-你还有什么问题要问-.md ├── 4-9-你的需求分析一般几天,用例大概写了多长时间-执行了多长时间-.md ├── 7-3-常见的关系型数据库有哪些.md ├── 3-19-你测试数据是从哪里获得-怎么获得的,假如不告诉你,你怎么处理-.md ├── 14-14-你们吞吐量是多少,响应时间是多少,你设置了多少井发-.md ├── 17-2-列表与元组的区别.md ├── 17-25-json与字典的区别-.md ├── 20-9-有时候下订单成功有时候下单失败是什么原因.md ├── 21-1-员工的绩效考核,量化标准.md ├── 14-16-有没有做过稳定性测试.md ├── 3-6-TestLink工具使用-.md ├── 9-20-上传文件的接口用-JMeter怎么做.md ├── 9-29-jmeter中-webserver中soap协议xml格式数据如何测试.md ├── 10-2-为什么做接口自动化-.md ├── 3-11-你提交的bug,开发不认可怎么办-.md ├── 6-10-怎么把lnux服务器的文件拷贝到另外一台-linux服务器.md ├── 6-3-日志具体是怎么看的.md ├── 11-9-自动化测试环境的搭建是怎样的-.md ├── 13-4-bytes如何去运行多个文件或者整个目录.md ├── 15-11-对于流量具体怎么测-.md ├── 4-1-简单介绍下最近做过的项目.md ├── 4-4-你们项目组有多少人、开发多少个、测试多少个-.md ├── 13-3-pytest框架如何去生成测试报告.md ├── 8-2--如何抓取https的包.md ├── 3-30-怎么保证测试质量或者你怎么保证你100-覆盖了需求.md ├── 10-5-比如说你接口的请求参数需要加密处理的,你们用的是什么加密方式,你加密怎么处理的-.md ├── 14-9-吞吐量与吞吐率跟负载有什么关系-.md ├── 17-22-fixture装饰器的作用与默认值.md ├── 2-9-怎么转行的,毕业之后一直从事软件测试吗.md ├── 20-11-微信里面,如果大家都看不到你发的朋友圈信息,分析下什么原因.md ├── 4-2-拿一个你所负责的模块,讲下具体怎么测的-.md ├── 9-7--接口文档主要包含哪些内容-.md ├── 11-33-数据驱动有没有了解过,具体怎么做的-.md ├── 4-7-你们整个项目写了多少用例,你负责的模块大概写了多少用例-.md ├── 17-17-打印九九乘法表.md ├── 17-3-python序列有哪些-.md ├── 3-17-如何保证质量.md ├── 4-12-每个阶段测试开发在干嘛(比如你写用例的时候开发在干嘛?).md ├── 9-13--你们接口怎么鉴权的-.md ├── 11-29-元素定位,有时候定位得到,有时候定位不到,可能是什么原因,你会怎么处理-.md ├── 20-10-APP出现崩溃时怎么抓取日志.md ├── 12-3-Unittest框架的原理-.md ├── 21-3-你的组员提交的bug开发不认同而吵起来了,你怎么处理.md ├── 3-8-提bug需要注意哪些问题-.md ├── 11-24-如何去定位时间控件.md ├── 15-10-对于CPU具体怎么测呢-.md ├── 17-23-如何进行异常处理.md ├── 8-6--get跟post请求的区别.md ├── 9-5--接口测试和平常的Ul测试有什么区别-.md ├── 1-2-离线版本说明.md ├── 11-17--xpath定位的方法--xpath怎么写-.md ├── 13-10-allure报告生成.md ├── 20-7-如果时间比较紧的话,你怎么安排你的工作.md ├── 11-52-对于生成的自动化测试报告如何分析-.md ├── 4-5-测试人员怎么分工的-.md ├── 8-16-post申请方式,用get会报什么错误。.md ├── 8-8--为什么要使用cookie和session:http是无状态协议.md ├── 9-21--对于POST请求,要求传递Json格式数据,-JMeter怎么做.md ├── 11-25-弹出框的操作-.md ├── 12-2-Web-UI自动化都用到过哪些库-.md ├── 20-12-微信里面,如果只是B看不到,其他朋友都可以看到,分析下什么原因.md ├── 9-9--你怎么去检查,分析.md ├── 10-10--jmeter中如何跨线程组传输参数.md ├── 20-8-返回数据现在有问题,怎么排查问题-.md ├── 3-15-测试中,如何判断是前端的bug还是后端的bug呢-.md ├── 3-9--bug怎么管理的,bug的生命周期或者是bug的状态.md ├── 4-8-最近的版本写了多少用例-.md ├── 11-30-对于不可见-隐藏的元素,你如何定位,如何处理-.md ├── 11-35-随机数如何操作?.md ├── 17-14-如何将字符串转换为小写-.md ├── 18-1-白盒测试怎么测.md ├── 8-7--http跟https的区别.md ├── 13-1-自动化测试使用的那些库.md ├── 13-2--pytest框架如何使用.md ├── 3-31-一个需求,7天要上线,你怎么做?.md ├── 4-3-你在这个项目里面主要做了些什么工作?.md ├── 9-32-http如何进行代理录制接口.md ├── 17-21-python中生成随机整数、随机小数、0-1之间小数方法.md ├── 2-5-你的职业发展规划和职业目标.md ├── 5-1-打电话功能怎么去测?.md ├── 11-15-jQuery定位的方法.md ├── 11-4-自动化测试流程是什么-.md ├── 15-15-App交互性怎么做的-.md ├── 4-10-在uat测试的时候,突然客户临时要大量的数据.md ├── 17-15-现场出了一个100-10000之间,打印出各位数字相加能被15整除的整数,每行打印十个.md ├── 12-1-你们自动化用例是怎么管理的-.md ├── 11-34-参数化的类型有哪些-自动化脚本如何实现数据的参数化-.md ├── 3-23-有没有写过测试报告,具体包括哪些内容-.md ├── 8-4-网络协议了解多少-.md ├── 11-27--有没有修改过页面元素的属性,具体怎么修改-.md ├── 6-7-linux常见命令有哪些,说出10条左右.md ├── 7-2-存储过程是怎么编写的.md ├── 9-44-request框架有哪些方法-.md ├── 20-6-项目快上线因为开发延迟,测试时间被压缩怎么做?.md ├── 11-14-js定位的5个方法.md ├── 14-6-有没有写过性能测试报告,具体包括哪些内容.md ├── 3-16-项目上线后发现bug,测试人员应该怎么办.md ├── 5-11-给你一个界面怎么测.md ├── 17-10-字典如何删除键和合并两个字典-.md ├── 10-17--requests中如何进行动态关联.md ├── 8-17-http协议提交请求头内容.md ├── 11-26-等待时间有哪三种,区别是什么-.md ├── 15-18-你们之前是用什么手机什么版本做兼容性测试的-.md ├── 17-18--冒泡排序.md ├── 3-4-有没有写过测试计划,具体包括哪些内容-.md ├── 13-7-fixture装饰器的作用与默认值.md ├── 3-14-bug的级别有哪些,级别如何判断.md ├── 20-1-有没有抓过包,为什么要抓包,具体怎么做的-.md ├── 14-7-什么是内存泄漏,什么是内存溢出?.md ├── 9-3-接口测试主要目的是什么-.md ├── 11-18-如何去定位下拉框.md ├── 11-20-如何在不同的网页之间切换.md ├── 7-6-索引有哪些,如何建立索引,素引的优缺点.md ├── 3-18-产品是怎么上线的-.md ├── 5-13-电商的库存逻辑怎么测。.md ├── 11-19-如何去定位内嵌界面.md ├── 11-51-你们有没有做过自动化工程维护工作。.md ├── 3-40-你们的开发语言是什么?.md ├── 6-6-测试环境是如何搭建的(弱项).md ├── 11-7-自动化测试的优点与缺点.md ├── 13-6-运行完成后,如何去自动发送邮件.md ├── 2-15-计算机专业课程有哪些-.md ├── 20-4-给你一个需求,你具体讲下,你怎么测试-.md ├── 9-15--cookie、session、token的区别.md ├── 14-22-响应超时,你是怎么定位的.md ├── 11-36-自动化中如何去操作excel表格-.md ├── 15-9-对于内存具体怎么测呢-.md ├── 10-16-你们做接口自动化,用例数据是怎么组织,管理的-.md ├── 20-2-为什么要进行抓包-具体怎么分析的-.md ├── 17-13-列出-python中可变数据类型和不可变数据类型,并简述原理-.md ├── 17-8-如何遍历列表,字典-.md ├── 11-43-断言有哪几种(三种),常见-assert断言.md ├── 14-8-吞吐量,吞吐率.md ├── 8-3-如何抓取手机的包.md ├── 10-18--你们-python接口自动化怎么去处理-cookie,-session的-.md ├── 11-10--seleniun的原理是什么-.md ├── 15-12-对于FPS具体怎么测-.md ├── 7-1-你们数据库怎么用.md ├── 8-9--cookie跟-session的区别.md ├── 2-1-简单的自我介绍下.md ├── 4-6-项目的送代周期--多久一选代--一个版本你们发现多少bug.md ├── 17-11-python实现列表去重的方法-.md ├── 9-36-requests如何做post请求接口.md ├── 9-37--requests上传文件接口如何测试.md ├── 11-48-POM模型如何划分模块.md ├── 10-12-jmeter如间在cmd命令下运行.md ├── 14-2-性能测试流程是怎么样的-.md ├── 5-3-图像上传功能的测试点.md ├── 11-13-定位元素的8个方法是什么-.md ├── 5-10-微信聊天功能测试用例.md ├── 9-16--接口测试的工具有哪些-.md ├── 11-16-css定位的方法-.md ├── 9-6--给你一个新的接口,你怎么去设计用例-.md ├── 12-5--Unittest框架如何使用-.md ├── 9-12--依赖于第三方的接口如何测试.md ├── 9-38-有没有做过https接口,具体怎么做.md ├── 11-39-自动化中如何去操作数据库.md ├── 6-1-Linux系统你是怎么用的-.md ├── 17-7--截取字符串里面部分字符怎么做-.md ├── 11-46-模块封装哪些,封装的目的是什么-有没有自己封装过一些函数-封装过哪些函数-.md ├── 8-1-抓包工具怎么用.md ├── 15-19-Android跟ios测试有什么区别-.md ├── 15-8-App的性能测试.md ├── 14-3-你们性能观察哪些指标,大概指标范围是怎么样的。.md ├── 8-14-http协议包含哪些内容.md ├── 5-8-微信点赞.md ├── 15-2-Web测试与app测试区别-.md ├── 9-2--两个接口有关联,-jmeter具体怎么做.md ├── 15-20-小程序怎么测试.md ├── 15-1-app测试你具体怎么做的-.md ├── 11-44-assert-般断言哪些.md ├── 11-21-如何去定位滚动条-滚动条怎么处理-.md ├── 10-13--jmeter运行完成后如何去自动发送邮件-.md ├── 16-2-appscan的原理是什么.md ├── 11-11--Selenium2与-Selenium1的区别是什么-.md ├── 11-28-定位不到元素,你碰到过哪些-怎么解决的-.md ├── 11-23、如何去处理上传-Windows文件-.md ├── 9-14--接口传输格式有哪些.md ├── 19-2-jenkins如何使用-.md ├── 6-5-nmon工具是如何使用的.md ├── 10-11-jmeter如何进行断言.md ├── 15-5-App兼容性测试怎么做的-.md ├── 20-5-给你一个项目,你怎么展开工作,请详细说一下,你具体怎么做的.md ├── 12-6-如何生成自动化测试报告-.md ├── 2-3-加班的看法.md ├── 9-18-接口工具-jmeter用到哪些组件,具体作用.md ├── 17-19写一个程序进行货币间币值转换函数.md ├── 12-4-Unittest框架有哪些组件-.md ├── 9-39--requests中如何测试json数据的接口.md ├── 3-1-你们原来项目的测试流程是怎么样的-.md ├── 14-13-每人说一个项目接口,你设置多少并发.md ├── 11-42-ui自动化你是怎么做断言的-.md ├── 11-22如何去模拟键盘与鼠标的操作-.md ├── 9-22--对于需要加密的请求参数,-JMeter如何处理-.md ├── 5-6-更换头像的测试点(站在app的角度来分析).md ├── 4-13-你们公司是否敏捷开发.md ├── 15-7-App弱网测试怎么做的--.md ├── 5-2-给你一个杯子怎么测?.md ├── 15-3-常用的adb的命令-.md ├── 11-12--seleniun库中用过哪些函数-.md ├── 5-7--qq登陆界面怎么测试,分析.md ├── 3-5-用例包含哪些部分,哪些用例设计方法,你一般常用哪些方法-.md ├── 14-24-你理解的性能调优是什么-.md ├── 5-5-给你一个电梯,你怎么测.md ├── 15-16-App的安装,卸载,更新测试具体从哪些方面考虑-.md ├── 15-6-App稳定怎么做的--Monkey怎么用(App稳定测试)-.md ├── 15-17-H5界面怎么测试.md ├── 9-1-接口测试怎么测.md ├── 9-23--如果接口返回的数据做了加密处理的,如何进行断言-.md ├── 5-4-搜索框的测试.md ├── 16-1-安全测试怎么测试-.md ├── 5-12-你说原来充值功能,你是怎么测试的-.md ├── 19-1--jenkins-+-ant-+-jmeter-+-svn接口自动化测试-.md ├── 2-2-为什么离职.md ├── 9-24-下一个接口用到上一个接口的数据,但返回的数据加密了,如何提取-.md ├── 14-1-性能测试怎么测试.md ├── 9-43--requests中sign签名与-token如何处理.md ├── 10-1-接口自动化怎么测试.md ├── 5-9-微信发红包测试点.md ├── 8-15-http状态码有哪些.md ├── 11-1-ui自动化怎么测试.md ├── 4-11-发现哪些映像比较深刻bug-经典bug-.md └── 14-11-你们的TPS的指标是什么估算的-.md ├── interview ├── add.gif ├── _navbar.assets └── 图片1.png ├── _navbar.md └── index.html /_coverpage.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/_coverpage.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /interview: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /add.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hctestedu/software-test-interview/HEAD/add.gif -------------------------------------------------------------------------------- /docs/1-1-文档目的.md: -------------------------------------------------------------------------------- 1 | ## 1-1-文档目的 2 | 3 | 本次文档是为了收集在面试中遇到的一问题与常见的一些答案并不是唯一答案 4 | -------------------------------------------------------------------------------- /docs/14-19-20并发40次循环怎么做?.md: -------------------------------------------------------------------------------- 1 | ## 14-19-20并发40次循环怎么做? 2 | 3 | 线程数设置20个,循环次数40 4 | -------------------------------------------------------------------------------- /docs/17-4-Python区分大小写吗-.md: -------------------------------------------------------------------------------- 1 | ## 17-4-Python区分大小写吗- 2 | 3 | python中是区分大小写的 4 | -------------------------------------------------------------------------------- /docs/6-8-如何查看端口是否被占用.md: -------------------------------------------------------------------------------- 1 | ## 6-8-如何查看端口是否被占用 2 | 3 | Netstat -anolgrep 8080 4 | -------------------------------------------------------------------------------- /docs/7-10-如何进行多表查询.md: -------------------------------------------------------------------------------- 1 | ## 7-10-如何进行多表查询 2 | 3 | Select * from A,b where a,id=b,id 4 | -------------------------------------------------------------------------------- /docs/2-13-是怎么考虑做软件测试呢-.md: -------------------------------------------------------------------------------- 1 | ## 2-13-是怎么考虑做软件测试呢- 2 | 3 | 1、个人性格合适 2、前景还可以 3、个人技能也匹配 4 | -------------------------------------------------------------------------------- /docs/9-33-jmeter如何做post请求格式接口.md: -------------------------------------------------------------------------------- 1 | ## 9-33-jmeter如何做post请求格式接口 2 | 3 | 参数填入到 parameter中 4 | -------------------------------------------------------------------------------- /docs/add.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hctestedu/software-test-interview/HEAD/docs/add.gif -------------------------------------------------------------------------------- /docs/7-4-你们用的什么数据库连接工具.md: -------------------------------------------------------------------------------- 1 | ## 7-4-你们用的什么数据库连接工具 2 | 3 | Navicat,数据库版本 mysql 5.7,端口默认是3306 4 | -------------------------------------------------------------------------------- /docs/9-27-jmeter中-cookies如何添加.md: -------------------------------------------------------------------------------- 1 | ## 9-27-jmeter中-cookies如何添加 2 | 3 | 添加http cookies管理器 4 | -------------------------------------------------------------------------------- /docs/9-28-jmeter中如何添加-header信息.md: -------------------------------------------------------------------------------- 1 | ## 9-28-jmeter中如何添加-header信息 2 | 3 | 添加http header管理器 4 | -------------------------------------------------------------------------------- /docs/11-2-什么是自动化测试-.md: -------------------------------------------------------------------------------- 1 | ## 11-2-什么是自动化测试- 2 | 3 | 把一些简单,重复的工作,用自动化去实现,减少成本原来手工完成事情,通过自动化脚本去替代 4 | -------------------------------------------------------------------------------- /docs/11-6-自动化测试用例的来源.md: -------------------------------------------------------------------------------- 1 | ## 11-6-自动化测试用例的来源 2 | 3 | 手工编写测试用例 4 | 5 | 把原来手工的测试用例,当成自动化测试用例 6 | -------------------------------------------------------------------------------- /docs/14-15-做井发你们一般cpu和内存是多少-.md: -------------------------------------------------------------------------------- 1 | ## 14-15-做井发你们一般cpu和内存是多少- 2 | 3 | cpu大概在60%多点,内存大概占比在65%的样子。 4 | -------------------------------------------------------------------------------- /docs/2-7-对于一个新的工具你有什么看法.md: -------------------------------------------------------------------------------- 1 | ## 2-7-对于一个新的工具你有什么看法 2 | 3 | 1.自己先去研究 2,找会的去请教 3,百度去找资料 4,工具原始文档 4 | -------------------------------------------------------------------------------- /docs/6-9-data目录下找到所有txt的文件的命令.md: -------------------------------------------------------------------------------- 1 | ## 6-9-data目录下找到所有txt的文件的命令 2 | 3 | Find /data -name “*.txt” 4 | -------------------------------------------------------------------------------- /docs/8-5-请求方式有哪些-.md: -------------------------------------------------------------------------------- 1 | ## 8-5-请求方式有哪些- 2 | 3 | 常用:get、post 4 | 5 | 不常用:delete、put、head、option 6 | -------------------------------------------------------------------------------- /docs/9-17-jmeter环境搭建.md: -------------------------------------------------------------------------------- 1 | ## 9-17-jmeter环境搭建 2 | 3 | (1)安装jdk(java运行环境) 4 | 5 | (2)安装 jmeter 6 | -------------------------------------------------------------------------------- /docs/9-31-jmeter中https证书如何处理.md: -------------------------------------------------------------------------------- 1 | ## 9-31-jmeter中https证书如何处理 2 | 3 | jmeter-option中-ssl证书管理器中导入证书 4 | -------------------------------------------------------------------------------- /docs/13-8-yield的作用是什么.md: -------------------------------------------------------------------------------- 1 | ## 13-8-yield的作用是什么 2 | 3 | 1. 装饰器使用的返回值,类似于 return方法 4 | 2. 使前置与后置处理分开 5 | -------------------------------------------------------------------------------- /docs/14-10-当你服务器满了之后,你们吞吐量和响应时间怎么变化的.md: -------------------------------------------------------------------------------- 1 | ## 14-10-当你服务器满了之后,你们吞吐量和响应时间怎么变化的 2 | 3 | 吞吐量会所有下降,响应时间会变长 4 | -------------------------------------------------------------------------------- /docs/2-12-多久能入职-.md: -------------------------------------------------------------------------------- 1 | ## 2-12-多久能入职- 2 | 3 | 1,公司比较满意,直接随时过去。 4 | 5 | 2,不是很满意,下周一,个人有点事情,比如说回家一趟等等。 6 | -------------------------------------------------------------------------------- /docs/3-13-界面中的乱码可以是哪里导致的-.md: -------------------------------------------------------------------------------- 1 | ## 3-13-界面中的乱码可以是哪里导致的- 2 | 3 | (1)数据库中的编码设置 (2)前端页面编码 (3)后台代码也会编码 4 | -------------------------------------------------------------------------------- /docs/7-9-查询数据库的前100行数据,你sq怎么写.md: -------------------------------------------------------------------------------- 1 | ## 7-9-查询数据库的前100行数据,你sq怎么写 2 | 3 | Select * from user limit 0,100 4 | -------------------------------------------------------------------------------- /docs/9-25-jmeter如何去做get请求接口.md: -------------------------------------------------------------------------------- 1 | ## 9-25-jmeter如何去做get请求接口 2 | 3 | 1、把请求参数填入URL或者把参数填入到 parameter中 4 | -------------------------------------------------------------------------------- /_navbar.assets/图片1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hctestedu/software-test-interview/HEAD/_navbar.assets/图片1.png -------------------------------------------------------------------------------- /docs/10-9--jmeter中对于json数据如何提取信息.md: -------------------------------------------------------------------------------- 1 | ## 10-9--jmeter中对于json数据如何提取信息 2 | 3 | 正则表达式提取或者 JSON Extractor提取 4 | -------------------------------------------------------------------------------- /docs/11-38-如何读取表格中总的列数跟行数.md: -------------------------------------------------------------------------------- 1 | ## 11-38-如何读取表格中总的列数跟行数 2 | 3 | 获取总列数: YS.ncols 4 | 5 | 获取总行数: YS.nrows 6 | -------------------------------------------------------------------------------- /docs/3-20-如何测试万分之一概率问题.md: -------------------------------------------------------------------------------- 1 | ## 3-20-如何测试万分之一概率问题 2 | 3 | 1) 用 Jmeter或者其他自动化测试工具造大量数据 4 | 2) 让开发修改概率的比例 5 | -------------------------------------------------------------------------------- /docs/8-11--TCP模型.md: -------------------------------------------------------------------------------- 1 | ## 8-11--TCP模型 2 | 3 | 有四层: 4 | 5 | 应用层 (telnet.stp.htp),传输层( CP UDP)、网络层,中数据链路层 6 | -------------------------------------------------------------------------------- /docs/11-31-如果元素经常变动你怎么做-.md: -------------------------------------------------------------------------------- 1 | ## 11-31-如果元素经常变动你怎么做- 2 | 3 | 1,少用绝对路径,多用css或者 jQuery定位 4 | 5 | 2,单个元素属性进行封装 6 | -------------------------------------------------------------------------------- /docs/11-45-断言的目的是什么-.md: -------------------------------------------------------------------------------- 1 | ## 11-45-断言的目的是什么- 2 | 3 | 可以判断实际结果是否为预期结果,如果断言失败的话,会终止执行下面的程序,不用再用肉眼去看去判断了是否有没有bug了 4 | -------------------------------------------------------------------------------- /docs/9-42--requests中https证书如何处理.md: -------------------------------------------------------------------------------- 1 | ## 9-42--requests中https证书如何处理 2 | 3 | https请求时在http请求中多了ssl证书,对于https请求的接口 4 | -------------------------------------------------------------------------------- /docs/11-5-自动化实现的比例,1-2年。.md: -------------------------------------------------------------------------------- 1 | ## 11-5-自动化实现的比例,1-2年。 2 | 3 | 2年以内,把原来手工做的事情15-30%用自动化脚本去替代 4 | 5 | 2年以上,实现40-70% 6 | -------------------------------------------------------------------------------- /docs/11-50-自动发送邮件里面包含哪些内容.md: -------------------------------------------------------------------------------- 1 | ## 11-50-自动发送邮件里面包含哪些内容 2 | 3 | 1、包含发件者邮箱地址,授权码 4 | 5 | 2、接收者邮箱地址,邮件主题,邮件正文内容,附件地址 6 | -------------------------------------------------------------------------------- /docs/7-12-数据库测试有没有发现什么问题.md: -------------------------------------------------------------------------------- 1 | ## 7-12-数据库测试有没有发现什么问题 2 | 3 | 原来我们做的一个功能,生成订单,在数据库中没有添加创建时间,导致后续根据时间点,去查询订单的时候,找到对应的数据 4 | -------------------------------------------------------------------------------- /docs/_navbar.assets/图片1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hctestedu/software-test-interview/HEAD/docs/_navbar.assets/图片1.png -------------------------------------------------------------------------------- /docs/17-24-类的继承与多态意思.md: -------------------------------------------------------------------------------- 1 | ## 17-24-类的继承与多态意思 2 | 3 | 1. 子类继承父类所有的方法 4 | 2. 父类不能继承子类 5 | 3. 子类再去修改父类里面的方法,子类都是新的方法(多态) 6 | -------------------------------------------------------------------------------- /docs/2-14-是否有考虑往开发方面测试-.md: -------------------------------------------------------------------------------- 1 | ## 2-14-是否有考虑往开发方面测试- 2 | 3 | 我觉得,IT行业,没有具体的界限,后期,开发也要懂测试,测试也要懂开发, 4 | 5 | 如果公司有机会,愿意去尝试 6 | -------------------------------------------------------------------------------- /docs/3-32-产品上线评判的标准-.md: -------------------------------------------------------------------------------- 1 | ## 3-32-产品上线评判的标准- 2 | 3 | 1)测试用例执行率100%,通过率95% 4 | 5 | 2)1-2级bug修复率达到100%,3-4级bug修复率达到95% 6 | -------------------------------------------------------------------------------- /docs/7-11-in与-exist的区别.md: -------------------------------------------------------------------------------- 1 | ## 7-11-in与-exist的区别 2 | 3 | 1.in()适合B表比A表数据**小**的情况 4 | 5 | 2.exists()适合B表比A表数据**大**的情况 6 | -------------------------------------------------------------------------------- /docs/1-2-离线版本说明.assets/pdf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hctestedu/software-test-interview/HEAD/docs/1-2-离线版本说明.assets/pdf.png -------------------------------------------------------------------------------- /docs/1-2-离线版本说明.assets/word.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hctestedu/software-test-interview/HEAD/docs/1-2-离线版本说明.assets/word.png -------------------------------------------------------------------------------- /docs/10-14--pytest如何做断言-.md: -------------------------------------------------------------------------------- 1 | ## 10-14--pytest如何做断言- 2 | 3 | 用 assert断言 4 | 5 | 1,断言返回的结果 6 | 7 | 2,进行逻辑检查,检查数据库产生的数据 8 | -------------------------------------------------------------------------------- /docs/3-25-如何写好一个测试用例.md: -------------------------------------------------------------------------------- 1 | ## 3-25-如何写好一个测试用例 2 | 3 | 能够发现bug的用例就是一个好的测试用例 4 | 5 | 当然我们在编写测试用例的时候,一定要步骤、场景清晰、尽量去覆盖所有的测试场景 6 | -------------------------------------------------------------------------------- /docs/11-49-划分模块的好处有哪些.md: -------------------------------------------------------------------------------- 1 | ## 11-49-划分模块的好处有哪些 2 | 3 | 1、方便维护与管理 4 | 5 | 2、模块化,比较方便清楚各个模块的东西,提高测试效率和准确性 6 | 7 | 注意:没有统一的标准 8 | -------------------------------------------------------------------------------- /docs/14-4-这个测试的环境配置,如转速度.md: -------------------------------------------------------------------------------- 1 | ## 14-4-这个测试的环境配置,如转速度 2 | 3 | 租用的服务器,一台数据库服务器,一台后端服务器 4 | 5 | 8核16G网络带宽1000M,2.5GHZ磁盘15000pm转数 6 | -------------------------------------------------------------------------------- /docs/17-26-如何获取字典中的所有键-.md: -------------------------------------------------------------------------------- 1 | ## 17-26-如何获取字典中的所有键- 2 | 3 | 我们可以直接遍历这个字典,用keys()函数取出所有的键 4 | 5 | 如果说要取出字典中所有的键和对应的值,我们用items()函数 6 | -------------------------------------------------------------------------------- /docs/3-35-什么是多分支开发和单分支开发-.md: -------------------------------------------------------------------------------- 1 | ## 3-35-什么是多分支开发和单分支开发- 2 | 3 | git工具相当于svn工具,分支开发每个版本或者模块,开发不同模块,分支合并,把所有的功能全部整合起来,其实就划分功能模块去开发。 4 | -------------------------------------------------------------------------------- /docs/9-35-requests如果做get请求,数据保存格式哪二种.md: -------------------------------------------------------------------------------- 1 | ## 9-35-requests如果做get请求,数据保存格式哪二种 2 | 3 | 1,保存在ur里面键值对方式发送请求 4 | 5 | 2,保存在参数 params里面 6 | -------------------------------------------------------------------------------- /docs/1-3-微信小程序刷题工具介绍.assets/小程序.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hctestedu/software-test-interview/HEAD/docs/1-3-微信小程序刷题工具介绍.assets/小程序.jpg -------------------------------------------------------------------------------- /docs/11-32-自动化如何破解验证码.md: -------------------------------------------------------------------------------- 1 | ## 11-32-自动化如何破解验证码 2 | 3 | 1,开发去掉验证码 4 | 5 | 2,开发设定一个万能验证码 6 | 7 | 3,python导入 pillow和OCR模块 pytesseract 8 | -------------------------------------------------------------------------------- /docs/14-23-压测返回数据报错,你怎么去定位的.md: -------------------------------------------------------------------------------- 1 | ## 14-23-压测返回数据报错,你怎么去定位的 2 | 3 | 1、如果是所有请求的数据报错,那肯定是脚本问题,认真检查脚本参数。 4 | 5 | 2、如果只是部分请求报错,那估计是性能可题了。 6 | -------------------------------------------------------------------------------- /docs/3-21-为什么要写测试用例-.md: -------------------------------------------------------------------------------- 1 | ## 3-21-为什么要写测试用例- 2 | 3 | 1)提高测试效率 2)提高测试覆盖率 3)监控测试进度情况 4)也是质量的标准指标 4 | 5 | CMM质量体系(用例数也是一个度量标准QA岗位) 6 | -------------------------------------------------------------------------------- /docs/10-6-你查询出来返回结果是密文,密文你怎么测试.md: -------------------------------------------------------------------------------- 1 | ## 10-6-你查询出来返回结果是密文,密文你怎么测试 2 | 3 | 这里首先要搞清楚用的是什么加密算法,问开发要解密算法,对返回的数据进行解密 4 | 5 | 解密完成之后在与预期结果对比,去进行断言 6 | -------------------------------------------------------------------------------- /docs/14-17--5000个人抢购,只能50个人能抢到,你怎么设计并发数的.md: -------------------------------------------------------------------------------- 1 | ## 14-17--5000个人抢购,只能50个人能抢到,你怎么设计并发数的 2 | 3 | 并发数,按群内最大人数计算,利用二八原则,5000 * 80%=4000,并发数的峰值为4000 4 | -------------------------------------------------------------------------------- /docs/14-20-我想从200慢慢加载到300,到400怎么做.md: -------------------------------------------------------------------------------- 1 | ## 14-20-我想从200慢慢加载到300,到400怎么做 2 | 3 | 这个需要用到自定义线程组,自定义线程组最大的好处就在于做压测的时候,可以设置一些复杂的业务场景,具体设置的话,就是..... 4 | -------------------------------------------------------------------------------- /docs/14-27-并发用户数跟响应时间与吞吐的关系.md: -------------------------------------------------------------------------------- 1 | ## 14-27-并发用户数跟响应时间与吞吐的关系 2 | 3 | 1,并发用户数越多,响应时间越长 4 | 5 | 2,并发用户数越多,吞吐量会一直,增加,增加到一个临界点(系统瓶颈后),不再增加,有少许的回落 6 | -------------------------------------------------------------------------------- /docs/3-10-提交bug包含哪些内容.md: -------------------------------------------------------------------------------- 1 | ## 3-10-提交bug包含哪些内容 2 | 3 | 所属产品、所属模块、所属项目、影响版本、指派人员 4 | 5 | 截止日期、严重程度、优先级、bug类型、bug环境 6 | 7 | Bug标题、重现步骤、附件 8 | -------------------------------------------------------------------------------- /docs/3-2-如果需求不明确的话你怎么办-.md: -------------------------------------------------------------------------------- 1 | ## 3-2-如果需求不明确的话你怎么办- 2 | 3 | 需求不明确的话我会在需求澄清会议上面提出来,问清楚这个需求只有明确需求, 4 | 5 | 才能更好的完成工作,后续工作中还是不清楚,可以找产品再去确认这个需求。 6 | -------------------------------------------------------------------------------- /docs/8-10--OSI七层网络模型.md: -------------------------------------------------------------------------------- 1 | ## 8-10--OSI七层网络模型 2 | 3 | (1)参考模型:只是提供给生产商或者软件开发商参考的模型 4 | 5 | (2)开发系统互联 6 | 7 | 8 | 9 | (3)有七层 10 | -------------------------------------------------------------------------------- /docs/9-10--什么是api接口测试.md: -------------------------------------------------------------------------------- 1 | ## 9-10--什么是api接口测试 2 | 3 | 接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点测试的重点, 4 | 5 | 是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等 6 | -------------------------------------------------------------------------------- /docs/9-8--你们什么时候测试接口.md: -------------------------------------------------------------------------------- 1 | ## 9-8--你们什么时候测试接口 2 | 3 | 一般有需求就会做,后台的接口开发好,就可以开始测。例外,如果增加了新需求,也要做接口测试,还有就是开发对后台的接口做了修改,交互逻辑发生变化,我们也要重新对接口进行测试。 4 | -------------------------------------------------------------------------------- /docs/10-8--jmeter如何进行参数化,参数化类型包含哪些.md: -------------------------------------------------------------------------------- 1 | ## 10-8--jmeter如何进行参数化,参数化类型包含哪些 2 | 3 | 用户参数自定义变量文件参数化,csv文件或者txt文件 4 | 5 | 函数助手随机函数,csvread函数数据库参数化 6 | -------------------------------------------------------------------------------- /docs/11-47-闭环有哪些,闭环的目是什么.md: -------------------------------------------------------------------------------- 1 | ## 11-47-闭环有哪些,闭环的目是什么 2 | 3 | 1、通过调用数据库操作把数据删除 4 | 5 | 2、打开的所有界面都需要关闭--可以在测试用例处设置装饰器,每个函数调用装饰器就可以每次关闭了才会打开另一个界面 6 | -------------------------------------------------------------------------------- /docs/11-8-你们自动化覆盖率有多少-.md: -------------------------------------------------------------------------------- 1 | ## 11-8-你们自动化覆盖率有多少- 2 | 3 | 2年以内,把原来手工做的事情30%用自动化脚本去替代 4 | 5 | 2年以上,实现40-70% 6 | 7 | 当时覆盖的确实也不是很多,差不多30-40%的样式吧 8 | -------------------------------------------------------------------------------- /docs/14-26-如果用户并发要慢慢加载,你怎么设置的.md: -------------------------------------------------------------------------------- 1 | ## 14-26-如果用户并发要慢慢加载,你怎么设置的 2 | 3 | 设置并发数的时候,我们会设置启动时间,比如说设置50个并发用户数就是50个线程组, 4 | 5 | 启动时间会设置成10秒,让用户慢慢启动起来 6 | -------------------------------------------------------------------------------- /docs/15-21-公众号,小程序比app更火,你怎么看.md: -------------------------------------------------------------------------------- 1 | ## 15-21-公众号,小程序比app更火,你怎么看 2 | 3 | 小程序有安装包,一般控制在1M以内 4 | 5 | 1,基于微信大的平台,有流量的入口 6 | 7 | 2,不需要安装,操作更加方便 8 | -------------------------------------------------------------------------------- /docs/17-1-一个变量没有定义报什么错误.md: -------------------------------------------------------------------------------- 1 | ## 17-1-一个变量没有定义报什么错误 2 | 3 | 一般在 python中会有红色的波浪线标出来要是运行后,就直接会报变量没定义的错 4 | 5 | NameError: name'i' is not defined 6 | -------------------------------------------------------------------------------- /docs/17-6-列表和字典有什么区别-.md: -------------------------------------------------------------------------------- 1 | ## 17-6-列表和字典有什么区别- 2 | 3 | 1) dict生成慢,查找快,list生成快,查找慢, 4 | 2) 另外list是有序的,dict是无需的, 5 | 3) list通过索引访问,dict使用key访问, 6 | -------------------------------------------------------------------------------- /docs/2-11-你的期望薪资是多少-.md: -------------------------------------------------------------------------------- 1 | ## 2-11-你的期望薪资是多少- 2 | 3 | 1,期望薪资不要说区间比如说:6-8,那肯定是6 4 | 5 | 2,如果原来公司在二线城市原有薪资不要说太高, 6 | 7 | 3,深圳那边薪资,比广州高10% - 15% 8 | -------------------------------------------------------------------------------- /docs/2-16-说一下上一个公司背景-.md: -------------------------------------------------------------------------------- 1 | ## 2-16-说一下上一个公司背景- 2 | 3 | 了解公司主要是什么项目,百度查下, 4 | 5 | 如果公司主营产品跟你项目不匹配 6 | 7 | 比如:原来公司做医疗设备,那就说:我们是项目外包的部门,专门接项目 8 | -------------------------------------------------------------------------------- /docs/2-17-超过26岁女孩子,目前有没有打算结婚.md: -------------------------------------------------------------------------------- 1 | ## 2-17-超过26岁女孩子,目前有没有打算结婚 2 | 3 | 暂时没有结婚的计划与打算,如果已经有小孩,说暂时不考虑二胎, 4 | 5 | 有小孩,可以说小孩在老家(原来有学员因为这个问题,被公司pas过) 6 | -------------------------------------------------------------------------------- /docs/2-6-你最近测试的论坛和网站是什么-.md: -------------------------------------------------------------------------------- 1 | ## 2-6-你最近测试的论坛和网站是什么- 2 | 3 | 工作中积累,查看网站论坛(51 testing),CSDN,书籍《性能测试专家》,《性能之巅》 4 | 5 | 偏开发, python自动化, selenium自动化 6 | -------------------------------------------------------------------------------- /docs/3-3-有哪些需要评审,哪些人在.md: -------------------------------------------------------------------------------- 1 | ## 3-3-有哪些需要评审,哪些人在 2 | 3 | 1、 xmind思维导图评审,主要是测试人员 4 | 5 | 2、测试用例需要评审,测试人员,开发人员,产品人员 6 | 7 | 3、需求文档,项目组所有的人员,都会到场 8 | -------------------------------------------------------------------------------- /docs/3-37-功能测试重复测试比较高,怎么看待这个问题-.md: -------------------------------------------------------------------------------- 1 | ## 3-37-功能测试重复测试比较高,怎么看待这个问题- 2 | 3 | 1)对于测试来说,还是良好耐心,问题无法避免事情,重复的事情还是要去执行 4 | 5 | 2)重复事情,我们用自动化测试来进行替代 6 | -------------------------------------------------------------------------------- /docs/4-14-你这个项目做了多久--你这个项目现在的用户里有多少--活跃量多少-.md: -------------------------------------------------------------------------------- 1 | ## 4-14-你这个项目做了多久--你这个项目现在的用户里有多少--活跃量多少- 2 | 3 | 时间根据简历来 4 | 5 | 比如:一年时间,金融项目:100W用户2W活跃用户 6 | -------------------------------------------------------------------------------- /docs/11-3-什么样的项目合适做自动化(至少三个).md: -------------------------------------------------------------------------------- 1 | ## 11-3-什么样的项目合适做自动化(至少三个) 2 | 3 | 功能需求,需求稳定,界面稳定,不会频繁变动,才可以做 4 | 5 | 版本迭代次数比较多,做出来才有意义 6 | 7 | 项目周期比较长(大项目)意义 8 | -------------------------------------------------------------------------------- /docs/3-26-什么是冒烟测试--在什么时候进行冒烟测试-.md: -------------------------------------------------------------------------------- 1 | ## 3-26-什么是冒烟测试--在什么时候进行冒烟测试- 2 | 3 | 冒烟测试一般我们是在系统测试之前,对所有主体的业务功能,测试看是否存在严重bug, 4 | 5 | 如果存在严重bug,表示,冒烟测试不通过 6 | -------------------------------------------------------------------------------- /docs/11-41-数据库返回的数据格式是什么类型的格式.md: -------------------------------------------------------------------------------- 1 | ## 11-41-数据库返回的数据格式是什么类型的格式 2 | 3 | 二维元组的格式 4 | 5 | 如果要获取具体某个值要用:cursor.fetchall[0][0]---这个表示提取游标中所有值里面的第一个元祖里面的第一个值 6 | -------------------------------------------------------------------------------- /docs/3-12-对应无法重现bug,应该怎么处理-.md: -------------------------------------------------------------------------------- 1 | ## 3-12-对应无法重现bug,应该怎么处理- 2 | 3 | 首先,我会多测几次,测了好多次都无法重现的话我就先把bug挂起,并且留意一下,看看往后的测试中,如果在后面的测试中重现bug就激活,如果经过几个版本都还没发现的话就关闭bug。 4 | -------------------------------------------------------------------------------- /docs/3-33-测试过程中,发现很多用例重复的,有的人认为没必要再测,你怎么看-.md: -------------------------------------------------------------------------------- 1 | ## 3-33-测试过程中,发现很多用例重复的,有的人认为没必要再测,你怎么看- 2 | 3 | 如果是同一个模块,重复用例,我们可以考虑不再进行重复测试,如果不同模块,引用相同的测试用例,我们还是需要重复测试 4 | -------------------------------------------------------------------------------- /docs/10-15--patent中如何去调取其他用例中返回的参数-.md: -------------------------------------------------------------------------------- 1 | ## 10-15--patent中如何去调取其他用例中返回的参数- 2 | 3 | 把返回的值定义成全局变量 4 | 5 | global a_id #定义成一个全局变量 6 | 7 | a_id = incharge_id 8 | -------------------------------------------------------------------------------- /docs/3-22-那你们测试用例是怎么编写的.md: -------------------------------------------------------------------------------- 1 | ## 3-22-那你们测试用例是怎么编写的 2 | 3 | 原来我们主要是用exce编写的,当然也用过用禅道, testlink去编写,禅道都是excel表格编写完成,导入禅道系统, testlink也可以Exce表格,编写,编写测试,导入 testlink 4 | -------------------------------------------------------------------------------- /docs/7-7--having是干嘛的-.md: -------------------------------------------------------------------------------- 1 | ## 7-7--having是干嘛的- 2 | 3 | 是一个条件查询,一般是跟着分组以后,比如 4 | 5 | select title, count(title) as t from titles group by title having t>=2; 6 | -------------------------------------------------------------------------------- /docs/14-18-微信群里面发送红包,5000个人群,只能3000个人能抢到,你怎么设计并发数的峰值.md: -------------------------------------------------------------------------------- 1 | ## 14-18-微信群里面发送红包,5000个人群,只能3000个人能抢到,你怎么设计并发数的峰值 2 | 3 | 并发数,按群内最大人数计算,利用二八原则,5000 * 80%=4000,并发数的峰值为4000 4 | -------------------------------------------------------------------------------- /docs/17-20-回文数.md: -------------------------------------------------------------------------------- 1 | ## 17-20-回文数 2 | 3 | num = input(‘Num:’) 4 | 5 | if num == num[::-1]; 6 | 7 | print("回文数") 8 | 9 | else: 10 | 11 | print(不是) 12 | -------------------------------------------------------------------------------- /docs/3-38-项目同时发布,你怎么处理-.md: -------------------------------------------------------------------------------- 1 | ## 3-38-项目同时发布,你怎么处理- 2 | 3 | 1)确定下,我们几个项目是否可以同步发布完成 4 | 5 | 2)如果确定项目不是同时发布(时间问题,人员问题) 6 | 7 | 确定下项目的优先级,跟客户这边商量优先级低一些项目推迟发布(产品跟客户) 8 | -------------------------------------------------------------------------------- /docs/3-7-如何提交一个好的BUG.md: -------------------------------------------------------------------------------- 1 | ## 3-7-如何提交一个好的BUG 2 | 3 | 对BUG有一个清晰明了的描述; 详细描述BUG重现的步骤 4 | 5 | 对于产生BUG的环境进行描述; 提交BUG相关的图片和日志; 6 | 7 | 定位好BUG的等级; 将预期结果与实际结果进行对比。 8 | -------------------------------------------------------------------------------- /docs/9-4--接口测试的流程.md: -------------------------------------------------------------------------------- 1 | ## 9-4--接口测试的流程 2 | 3 | 1,首先分析开发给到的接口文档 4 | 5 | 2,接口文档分析完成,编写测试用例 6 | 7 | 3,然后借助接口测试工具去测试执行测试用例 8 | 9 | 4,发现bug提交bug,并跟进bug修复 10 | -------------------------------------------------------------------------------- /docs/10-3-假如公司想要做自动化,让你去做,你会从那些方面考虑入手-.md: -------------------------------------------------------------------------------- 1 | ## 10-3-假如公司想要做自动化,让你去做,你会从那些方面考虑入手- 2 | 3 | 1.测试范围 2.时间进度 3.人员安排 4.框架确定 4 | 5 | 5.环境的搭建 6.准备好测试数据 数据驱动 7.工程的管理后期的维护 6 | -------------------------------------------------------------------------------- /docs/14-25-如果要做万并发,你怎么做.md: -------------------------------------------------------------------------------- 1 | ## 14-25-如果要做万并发,你怎么做 2 | 3 | 那我们就需要考虑分布式压测,那需要准备几台测试机, 4 | 5 | master机器要设置。。。。 6 | 7 | 奴隶机要设置。。。。。 8 | 9 | 也可以租用云测平台进行测试 10 | -------------------------------------------------------------------------------- /docs/15-22-微信开发者工具如何使用.md: -------------------------------------------------------------------------------- 1 | ## 15-22-微信开发者工具如何使用 2 | 3 | 原来我们的下载一个微信开发者工具,导入开发给的小程序代码包,在输入开发给予的 4 | 5 | appid,调试与测试小程序代码包, 6 | 7 | 如果真机测试,也可以扫描开发在微信开发者工具生成的二维码进行测试 8 | -------------------------------------------------------------------------------- /docs/3-28-和开发沟通。是怎么沟通的.md: -------------------------------------------------------------------------------- 1 | ## 3-28-和开发沟通。是怎么沟通的 2 | 3 | 一般我在提bug的时候跟开发沟通最多,比如有一些不清晰的内容会去问开发,还有提完bug后会跟踪bug的进度,提醒开发尽快修复bug,还有测接口的时候去找开发拿接口文档,其实我们的工作跟开发都是息息相关的所以都经常都会有沟通的。 4 | -------------------------------------------------------------------------------- /docs/3-29-测试中有哪些风险.md: -------------------------------------------------------------------------------- 1 | ## 3-29-测试中有哪些风险 2 | 3 | 1)测试,需求理解上面有偏差 4 | 5 | 2)测试人员水平不够,测试人员覆盖点不全 6 | 7 | 3)测试人员时间不够,导致测试不完全 8 | 9 | 4)测试环境上面不足,导致测试点不能完全测试完成 10 | -------------------------------------------------------------------------------- /docs/9-19-jmeter原理是什么.md: -------------------------------------------------------------------------------- 1 | ## 9-19-jmeter原理是什么 2 | 3 | jmeter做接口测试其实就是模拟前端向后台发请求,它是通过线程来模拟真实用户对web服务器的访问压力。基本原理是建立一个线程池,多线程运行取样器产生大量负载,在运行过程中通过断言来验证结果的正确性,可以通过监听来记录测试结果 4 | -------------------------------------------------------------------------------- /docs/9-30-jmeter-中如何去连接数据库.md: -------------------------------------------------------------------------------- 1 | ## 9-30-jmeter-中如何去连接数据库 2 | 3 | 1,测试计划中导入mysq-connecti的jar包 4 | 5 | 2,配置元件中添加 jdbc-connection连接,配置连接参数 6 | 7 | 3,取样器中添加 jdbc-request 8 | -------------------------------------------------------------------------------- /docs/3-39-你们开发转测试怎么转的.md: -------------------------------------------------------------------------------- 1 | ## 3-39-你们开发转测试怎么转的 2 | 3 | 1)开发人员发邮件告知对应的测试人员:新的代码地址、最新的sql文件、需求开发完成的情况。 4 | 5 | 2)测试人员把最新的代码和sql脚本更新到测试环境中,并进行冒烟测试, 6 | 7 | 要是冒烟测试不通过则转测失败。 8 | -------------------------------------------------------------------------------- /docs/6-2-Linux是什么工具连接的,-Linux版本是多少.md: -------------------------------------------------------------------------------- 1 | ## 6-2-Linux是什么工具连接的,-Linux版本是多少 2 | 3 | Xshell、CRT、SSH用的ssh协议连接,端口是22 4 | 5 | 传输文件用xftp工具,占用的端口是21 6 | 7 | Linux版本 centos6.5版本64位 8 | -------------------------------------------------------------------------------- /docs/14-21-需要插入500条数据,你怎么插入.md: -------------------------------------------------------------------------------- 1 | ## 14-21-需要插入500条数据,你怎么插入 2 | 3 | 1、使用存储过程来实现 4 | 5 | 2、可以通过 JMeter来实现,调用注册接口,线程数设置为500,账号,密码可以通过 JMeter中的随机函数 randomString(),random()函数结合计数器来实现。 6 | -------------------------------------------------------------------------------- /docs/21-2-你组内有一个技术比你牛逼年轻的组员不服你,你会怎么处理.md: -------------------------------------------------------------------------------- 1 | ## 21-2-你组内有一个技术比你牛逼年轻的组员不服你,你会怎么处理 2 | 3 | 不要开除他,首先要认可他的能力,跟员工沟通,自身要有宽容之心,看下自身的不足以及 4 | 5 | 需要提升的方面,技术方向,管理的能力等等,看下他为什么不服的,尽量做到让他服你 6 | -------------------------------------------------------------------------------- /docs/3-24-测试报告中测试的结论是什么-.md: -------------------------------------------------------------------------------- 1 | ## 3-24-测试报告中测试的结论是什么- 2 | 3 | 测试报告里面有个测试结论: 4 | 5 | 1)bug的情况、bug级别、bug分布情况(分布哪些模块)、 6 | 7 | bug产生原因(设计问题,需求问题,代码问题) 8 | 9 | 2)测试是否通过 10 | -------------------------------------------------------------------------------- /docs/3-34上线后有没有另外的测试用例在生产环境里测试.md: -------------------------------------------------------------------------------- 1 | ## 3-34上线后有没有另外的测试用例在生产环境里测试 2 | 3 | 有:我们会去单独去编写测试用例,只是主体流程用例,新增功能的用例 4 | 5 | 没有:我们会挑选原来测试用例中,级别比较高的用例去执行,或者我们建立一个 checklist列表,去检查功能是否正常使用。 6 | -------------------------------------------------------------------------------- /docs/6-4-监控资源命令用到哪些.md: -------------------------------------------------------------------------------- 1 | ## 6-4-监控资源命令用到哪些 2 | 3 | 查着进程ps -ef过滤添加grep来着 4 | 5 | 杀掉进程 kill 强制杀掉 -9 6 | 7 | 监控资源top vmstat 8 | 9 | 磁盘 df -h 10 | 11 | 内存 free -m 12 | -------------------------------------------------------------------------------- /docs/14-5-性能测试计划有哪些内容.md: -------------------------------------------------------------------------------- 1 | ## 14-5-性能测试计划有哪些内容 2 | 3 | 写过,主要是时间进度安排与工作安排,主要是环境,测试任务,测试需求,测试方法与策略,测试环境准备,测试通过的标准。 4 | 5 | 比如说原来我们一个项目性能测试时做了5天,那我们计划是,测试策略与用例编写一天,测试准备需要1天,测试执行2天,报告总结1天。 6 | -------------------------------------------------------------------------------- /docs/2-8-你做了3年测试收获,你的测试心得.md: -------------------------------------------------------------------------------- 1 | ## 2-8-你做了3年测试收获,你的测试心得 2 | 3 | 3年的测试经验,对我来说也是3年的工作经验,在这3年的工作经验当中,我觉得态度比能力要重要,做好一个测试,最主要是性格,信心,耐心,细心还需要良好的沟通能力。不断学习的能力,产品质量,测试流程这块很关键,好的计划加好的执行才能成就好的产品。 4 | -------------------------------------------------------------------------------- /docs/7-8--where与-having的区别-.md: -------------------------------------------------------------------------------- 1 | ## 7-8--where与-having的区别- 2 | 3 | having是在分组**后**对数据进行过滤 4 | 5 | where是在分组**前**对数据进行过滤 6 | 7 | having后面可以使用聚合函数 8 | 9 | where后面不可以使用聚合 10 | -------------------------------------------------------------------------------- /docs/8-12--TCP和UDP的区别-.md: -------------------------------------------------------------------------------- 1 | ## 8-12--TCP和UDP的区别- 2 | 3 | (1)TCP面向连接、而UDP面向非连接 4 | 5 | (2)TCP相对UDP更可靠 6 | 7 | (3)TCP应用场景,用于传输少量数据,而UDP用于传输大量数据 8 | 9 | (4)TCP传输的数据相对UDP慢 10 | -------------------------------------------------------------------------------- /docs/1-3-微信小程序刷题工具介绍.md: -------------------------------------------------------------------------------- 1 | # 重点!!免费,免费,免费 2 | 3 | > 文档阅读内容一次比较多,不容易翻阅。 4 | > 5 | > 有人专门开发了一款微信小程序刷面试题 6 | 7 | ## 内测中,暗号: 1949 8 | 9 |  10 | -------------------------------------------------------------------------------- /docs/13-9--pytest运行用例,用例命名规则有哪些-.md: -------------------------------------------------------------------------------- 1 | ## 13-9--pytest运行用例,用例命名规则有哪些- 2 | 3 | 1. 文件名以test_*.py文件和 *_test.py命名 * 代表任意任何内容 4 | 2. def函数要以test_开头 5 | 3. class类要以test_开头. 6 | 4. 以test_开头的方法 7 | -------------------------------------------------------------------------------- /docs/17-9-列出5个-python标准库-.md: -------------------------------------------------------------------------------- 1 | ## 17-9-列出5个-python标准库- 2 | 3 | os: 提供了不少与操作系统相关联的函数 4 | 5 | sys: 通常用于命令行参数 6 | 7 | re: 正则匹配 8 | 9 | math: 数学运算 10 | 11 | datetime: 处理日期时间 12 | -------------------------------------------------------------------------------- /docs/20-3-大概给我讲下抓包的原理-.md: -------------------------------------------------------------------------------- 1 | ## 20-3-大概给我讲下抓包的原理- 2 | 3 | 其实就是把 fiddler设置为代理服务器,那么浏览器上发出所有请求都由 fiddler这个工具来代理转发,其实就是说:通过fiddler来拦截客服端与服务端之间的数据交互,这样我们可以拦截到客户端给服务器发了什么数据,服务器给客户端响应了什么数据,然后对数据进行分析。 4 | -------------------------------------------------------------------------------- /docs/8-13-tcp的三次握手是怎么实现的-.md: -------------------------------------------------------------------------------- 1 | ## 8-13-tcp的三次握手是怎么实现的- 2 | 3 | (1)客户端给服务器发送报文syn=1和序列号Seq=x 4 | 5 | (2)服务器接收到客户端的请求,服务器响应syn=1,ack=x+1,seq=y 6 | 7 | (3)客户端接收到服务器的响应,返回给服务器,ack=y+1,seq=z 8 | -------------------------------------------------------------------------------- /docs/10-4-你写了多少接口自动化用例.md: -------------------------------------------------------------------------------- 1 | ## 10-4-你写了多少接口自动化用例 2 | 3 | 自动化用例,也没有具体数过,当时我负责的所有模块的接口的自动用例都是我这边独立完成的, 4 | 5 | 有模块的用例会多一点,有些会少一点,这具体看接口的参数有多少,参数多限制条件多的, 6 | 7 | 一般用例会比较多一点,我负责的模块大概有100多条用例是有的! 8 | -------------------------------------------------------------------------------- /docs/11-40-如何获取数据库返回的所有,一行,前5行.md: -------------------------------------------------------------------------------- 1 | ## 11-40-如何获取数据库返回的所有,一行,前5行 2 | 3 | 获取游标中多条数据:many= cursor.fetchmany(5) 4 | 5 | 获取游标中第一条所有数据:one= cursor.fenchone() 6 | 7 | 首先已经建立好了数据库连接的函数,并且 return了 8 | -------------------------------------------------------------------------------- /docs/2-10-以前在哪里上班,公司地址,测试多少人,开发多少人.md: -------------------------------------------------------------------------------- 1 | ## 2-10-以前在哪里上班,公司地址,测试多少人,开发多少人 2 | 3 | 根据你简历上面写的,公司详细地址 4 | 5 | 产品1、项目1个、架构师1个、前端3个、后端 5个、0os 1个、Android 1个, 6 | 7 | 测试3个(测试主管,核心测试人员)、运维1个、ui 1个 8 | -------------------------------------------------------------------------------- /docs/9-26-meter如何做json数据格式的接口.md: -------------------------------------------------------------------------------- 1 | ## 9-26-meter如何做json数据格式的接口 2 | 3 | 1、把参数编写到 body data里面,用json格式编写 4 | 5 | 2、在 headers头里面,定义数据格式为json格式 6 | 7 | Content-Type application/json;charset=utf-8 8 | -------------------------------------------------------------------------------- /_navbar.md: -------------------------------------------------------------------------------- 1 | * ❤️软件测试实战项目❤️ 2 | * [WEB UI自动化免费项目]() 3 | * [接口测试免费项目]() 4 | * [配套视频讲解(内测申请)](https://wtnjm.xet.tech/s/4fmrTx ) 5 | * 软件测试交流群 6 | * [QQ群(点击申请进群)](https://wtnjm.xet.tech/s/4fmrTx ) -------------------------------------------------------------------------------- /docs/10-7-http如何进行代理录制接口.md: -------------------------------------------------------------------------------- 1 | ## 10-7-http如何进行代理录制接口 2 | 3 | Web端 4 | 5 | 1,浏览器设置代理就可以录制,默认ip为 localhost,端口8888 6 | 7 | 手机端 8 | 9 | 1,手机设置代理就可以录制 10 | 11 | 默认ip为pc机器的ip地址,端口8888 12 | -------------------------------------------------------------------------------- /docs/11-37-如何去读取表格中一行,一列数据,具体数据.md: -------------------------------------------------------------------------------- 1 | ## 11-37-如何去读取表格中一行,一列数据,具体数据 2 | 3 | 1、读取一行数据:YS.row_values(0)0表示第一行 4 | 5 | 2、读取一列数据:YS.col_values(0)0表示第一行 6 | 7 | 读取具体某个数据:YS.row_values(O)[0]--表示获取第一行第一列 8 | -------------------------------------------------------------------------------- /docs/13-5-pytest框架如何去运行上次失败的测试用例.md: -------------------------------------------------------------------------------- 1 | ## 13-5-pytest框架如何去运行上次失败的测试用例 2 | 3 | 1. pytest --lf运行用例的路径 --- 只运行上次失败的用例 4 | 2. pytest --ff运行用例的路径 --- 运行上次所有的用例,优先运行上次失败的用例 5 | 6 | (如果没有写路径,则执行当前目录下所有的用例) 7 | -------------------------------------------------------------------------------- /docs/17-12-python内建数据类型有哪些-.md: -------------------------------------------------------------------------------- 1 | ## 17-12-python内建数据类型有哪些- 2 | 3 | 整型 -- int 4 | 5 | 布尔型 -- bool 6 | 7 | 字符串 -- str 8 | 9 | 列表 -- list 10 | 11 | 元组 -- tuple 12 | 13 | 字典 -- dict 14 | -------------------------------------------------------------------------------- /docs/17-16-然后现场出了一个-Python题目1689年到2019年打印出所有的闰年.md: -------------------------------------------------------------------------------- 1 | ## 17-16-然后现场出了一个-Python题目1689年到2019年打印出所有的闰年 2 | 3 | for i in range(2000,2501): 4 | 5 | if i%4==0 and i%100!=0 or i%400==0; 6 | 7 | print(i) 8 | -------------------------------------------------------------------------------- /docs/3-27-回归测试策略.md: -------------------------------------------------------------------------------- 1 | ## 3-27-回归测试策略 2 | 3 | 1)功能的回归 4 | 5 | 优先测试用例级别比较高的功能模块,可以进行自动化测试 6 | 7 | 如果时间够,进行全量测试 8 | 9 | 2)bug回归 10 | 11 | 复测这个bug,并且相关联的模块与功能也会测试一遍,以免由于修改bug导致其他问题产生 12 | -------------------------------------------------------------------------------- /docs/9-34--如何搭建-python+-requests接口测试环境.md: -------------------------------------------------------------------------------- 1 | ## 9-34--如何搭建-python+-requests接口测试环境 2 | 3 | 1,安装 pycharm 4 | 5 | 2,安装 python运行环境 6 | 7 | 3,安全 requests包 8 | 9 | 4,pycharm中导入 requests包 10 | -------------------------------------------------------------------------------- /docs/9-40--requests中如何添加-cookies.md: -------------------------------------------------------------------------------- 1 | ## 9-40--requests中如何添加-cookies 2 | 3 | 定义参数为 cookies,用字典保存 4 | 5 | 在请求过程中添加 cookies值 6 | 7 | requests.post(url=url,data=data,headers=headers,cookies=cookies) 8 | -------------------------------------------------------------------------------- /docs/20-13-你测试数据是从哪里获得-怎么获得的,假如不告诉你,你怎么处理-.md: -------------------------------------------------------------------------------- 1 | ## 20-13-你测试数据是从哪里获得-怎么获得的,假如不告诉你,你怎么处理- 2 | 3 | (1) 一般都是我们测试人员在测试过程自己造的测试数据,如果大量数据,我们可以用到存储过程 4 | 5 | (2) 也可以让运维人员帮忙从生产环境导出相关的测试数据,如果测试数据中涉及安全性的数据,直接是不能导出 6 | -------------------------------------------------------------------------------- /docs/7-5-左连接与右连接有什么区别.md: -------------------------------------------------------------------------------- 1 | ## 7-5-左连接与右连接有什么区别 2 | 3 | 左连接:以左边的表(employ)为主,显示左边表列的全部数据,如果右边表没有对应的数据, 4 | 5 | 则为NULL 6 | 7 | 右连接:以右边的表(student)为主,显示右边表列的全部数据,如果左边表没有对应的数据, 8 | 9 | 则为NULL 10 | -------------------------------------------------------------------------------- /docs/9-41--requests中如何添加-headers信息.md: -------------------------------------------------------------------------------- 1 | ## 9-41--requests中如何添加-headers信息 2 | 3 | 定义参数为 headers,用字典保存 4 | 5 | 在请求过程中添加 headers值 6 | 7 | requests.post(urlurl,data= data,headers=headers,cookies=cookies) 8 | -------------------------------------------------------------------------------- /docs/15-4-adb的作用的-.md: -------------------------------------------------------------------------------- 1 | ## 15-4-adb的作用的- 2 | 3 | adb其实是一个 android调试桥,主要是用来监控手机设备的,实现手机端与电脑端的通信,通过adb来实现对手机的管控。比如:通过adb安装软件卸载软件,通过adb可以查看手机的资源使用情况,可以查看cpu内存等资源。还通过adb实现手机端与电脑的文件的传输通过adb查看手机端app运行的日志,通过看日志来分析具体问题。 4 | -------------------------------------------------------------------------------- /docs/17-5-如何获取字典中的所有键-.md: -------------------------------------------------------------------------------- 1 | ## 17-5-如何获取字典中的所有键- 2 | 3 | 我们可以直接遍历这个字典,用keys()函数取出所有的键 4 | 5 | for key in dict.keys() 6 | 7 | 如果说要取出字典中所有的键和对应的值,我们用items0函数 8 | 9 | for key,value in dict.items() 10 | -------------------------------------------------------------------------------- /docs/3-36-兼容性测试你们是怎么测的--app与web.md: -------------------------------------------------------------------------------- 1 | ## 3-36-兼容性测试你们是怎么测的--app与web 2 | 3 | Web: 4 | 5 | 不同的浏览器,E,谷歌,火狐,浏览器显示比例,浏览器前进,后退,刷新按钮。 6 | 7 | App: 8 | 9 | 不同手机厂商,型号,系统版本,内存大小,分辨率,屏幕的大小,高端机与低端机,考虑平板 10 | -------------------------------------------------------------------------------- /docs/9-11--什么情况下开展接口测试-.md: -------------------------------------------------------------------------------- 1 | ## 9-11--什么情况下开展接口测试- 2 | 3 | 1、项目处于开发阶段 4 | 5 | 2、有接口需求文档,开发已完成联调,功能测试展开之前 6 | 7 | 3、专项测试:参数约束测试,业务场景测试,测试接口请求响应时间(性能) 8 | 9 | 4、版本上线前,进行整体回归测试,查看接口是否有异常(如404等) 10 | -------------------------------------------------------------------------------- /docs/navbar.md: -------------------------------------------------------------------------------- 1 | * ❤️软件测试实战项目❤️ 2 | * [WEB UI自动化免费项目]() 3 | * [接口测试免费项目]() 4 | * [配套视频讲解(内测申请)](https://wtnjm.xet.tech/s/4fmrTx ) 5 | * 软件测试交流群 6 | * [QQ群(点击申请进群)](https://wtnjm.xet.tech/s/4fmrTx ) 7 | -------------------------------------------------------------------------------- /docs/2-4-你还有什么问题要问-.md: -------------------------------------------------------------------------------- 1 | ## 2-4-你还有什么问题要问- 2 | 3 | 少问一些福利相关的问题 4 | 5 | 1.公司现在做什么项目 2.公司目前做哪方面测试 3.公司这边测试人员分配比例 6 | 7 | 4.进入公司,我这边大概的工作安排 5,公司这么后续发展机会还有培养 8 | 9 | 6,有没有培训 7,面试没有回答上的问题,再去请教 10 | -------------------------------------------------------------------------------- /docs/4-9-你的需求分析一般几天,用例大概写了多长时间-执行了多长时间-.md: -------------------------------------------------------------------------------- 1 | ## 4-9-你的需求分析一般几天,用例大概写了多长时间-执行了多长时间- 2 | 3 | 如果按照2周一个版本来算的话,我们需求分析一般是由产品SE先组织我们开会,讲清新版本需求,然后我们再花1天到1天半时间去详细分析需求,另外有2天左右时间来写用例,写完用例会进行用例评审,后面的时间基本就是在执行用例,提bug,并跟进bug修复问题。 4 | -------------------------------------------------------------------------------- /docs/7-3-常见的关系型数据库有哪些.md: -------------------------------------------------------------------------------- 1 | ## 7-3-常见的关系型数据库有哪些 2 | 3 | mysql、SQL Server、Oracle、Sybase、DB2等 4 | 5 | MySQL是开源免费的; 6 | 7 | SQL Server是由微软公司开发的关系型数据库管理系统,一般用于Web上存储数据; 8 | 9 | Oracle数据的大量性数据的保存的持久性; 10 | -------------------------------------------------------------------------------- /docs/3-19-你测试数据是从哪里获得-怎么获得的,假如不告诉你,你怎么处理-.md: -------------------------------------------------------------------------------- 1 | ## 3-19-你测试数据是从哪里获得-怎么获得的,假如不告诉你,你怎么处理- 2 | 3 | (1) 一般都是我们测试人员在测试过程自己造的测试数据,如果大量数据,我们可以用到存储过程。 4 | 5 | (2) 也可以让运维人员帮忙从生产环境导出相关的测试数据,如果测试数据中涉及安全性的数据, 6 | 7 | 直接是不能导出。 8 | -------------------------------------------------------------------------------- /docs/14-14-你们吞吐量是多少,响应时间是多少,你设置了多少井发-.md: -------------------------------------------------------------------------------- 1 | ## 14-14-你们吞吐量是多少,响应时间是多少,你设置了多少井发- 2 | 3 | 登录:吞吐量大概在13.5/sec响应时间<1s,设置的并发数180个并发数。 4 | 5 | 查询:吞吐量大概在36/sec响应时间<3s,设置的并发数500个并发数。 6 | 7 | 下单:吞吐量大根在25.6/sec响应时间<3s,设置的并发数350个并发。 8 | -------------------------------------------------------------------------------- /docs/17-2-列表与元组的区别.md: -------------------------------------------------------------------------------- 1 | ## 17-2-列表与元组的区别 2 | 3 | 他们最大的区别 4 | 5 | 1) 列表可以修改,元组不可以修改,列表就相当于一个动态数组,而元组是一个静态数组。 6 | 2) 从设计上说,列表是用来保存多个相互独立对象的数据集合,而元组设计的初衷就是为了描述一个不会改变的事物的多个属性。 7 | 3) 然后列表的声明用中括号元组的声明用小括号,并且元组只有一个元素的时候需要在后面加逗号。 8 | -------------------------------------------------------------------------------- /docs/17-25-json与字典的区别-.md: -------------------------------------------------------------------------------- 1 | ## 17-25-json与字典的区别- 2 | 3 | 区别总结: 4 | 5 | 定义上:字典是一种数据结构; 6 | 7 | json是一种数据的表现形式,一种数据格式。 8 | 9 | 写法上:字典中的键key,只要是 hashable的数据类型即可; 10 | 11 | 但是json的键key(属性名称),必须是用双引号引起来的字符串。 12 | -------------------------------------------------------------------------------- /docs/20-9-有时候下订单成功有时候下单失败是什么原因.md: -------------------------------------------------------------------------------- 1 | ## 20-9-有时候下订单成功有时候下单失败是什么原因 2 | 3 | 对于订单成功和失败的情况,各自去抓包,把两次抓取的数据来做对比,分析原因 4 | 5 | 1、假如发送的请求不同,那肯定是前端问题, 6 | 7 | 2、假如是返回数据不同,那基本判定是后台代码出了问题,这时候可以去看日志,看数据库,把这些信息提交给开发处理,也可能是网络问题没发出去的。 8 | -------------------------------------------------------------------------------- /docs/21-1-员工的绩效考核,量化标准.md: -------------------------------------------------------------------------------- 1 | ## 21-1-员工的绩效考核,量化标准 2 | 3 | 1、考勤,任务完成率,失效,完成,满意度,用例编写量,提交bug量,线上问题 4 | 5 | 2、新的任务完成,新技术研究,对团队的贡献 6 | 7 | 8 | 9 | 10 | https://blog.csdn.net/maniacfish/article/details/6221148 11 | -------------------------------------------------------------------------------- /docs/14-16-有没有做过稳定性测试.md: -------------------------------------------------------------------------------- 1 | ## 14-16-有没有做过稳定性测试 2 | 3 | 部分接口有做过稳定性测试。具体怎么做的? 4 | 5 | 稳定性测试主要就是看某个业务在高并发情况下是否能持续稳定运行嘛,当时大部分的核心业务都有做过稳定性的,这个需是把并发数设置为峰值,然后循环次数设置为永远,例外要开启调度器,调度器中的持续时间设定为3600秒,让它持续压测1个小时。看下接口的各项性能指标的变化,是否在预期的指标范围之内。 6 | -------------------------------------------------------------------------------- /docs/3-6-TestLink工具使用-.md: -------------------------------------------------------------------------------- 1 | ## 3-6-TestLink工具使用- 2 | 3 | (1)创建用户,并给新创建的用户指定权限。 4 | 5 | (2)创建测试用例,对测试用例进行增、删、改、查 6 | 7 | (3)把测试用例关联到对应的测试计划中。 8 | 9 | (4)把测试用例指派给对应的测试人员。 10 | 11 | (5)对应的测试人员,查看被指派的测试用例,并执行测试用例。 12 | -------------------------------------------------------------------------------- /docs/9-20-上传文件的接口用-JMeter怎么做.md: -------------------------------------------------------------------------------- 1 | ## 9-20-上传文件的接口用-JMeter怎么做 2 | 3 | **另外一种问法:有没有做过文件上传的接口,具体怎么做?** 4 | 5 | 要测试上传文件的接口,在JMeter的http请求这个组件中传递请求参数的栏目中专门提供了一个用来文件上传的,在这里面需要填写几个内容,一个就是文件的路径,还有一个就会参数名称,还有就是MlME类型也就是指定要上传的文件的类型,这样就可以了。 6 | -------------------------------------------------------------------------------- /docs/9-29-jmeter中-webserver中soap协议xml格式数据如何测试.md: -------------------------------------------------------------------------------- 1 | ## 9-29-jmeter中-webserver中soap协议xml格式数据如何测试 2 | 3 | 1,数据格式编写在 body data里面用xml数据格式保存 4 | 5 | 2,http header里面数据格式为xml 6 | 7 | Content-Type application/soap+xml;charset=utf-8 8 | -------------------------------------------------------------------------------- /docs/10-2-为什么做接口自动化-.md: -------------------------------------------------------------------------------- 1 | ## 10-2-为什么做接口自动化- 2 | 3 | 接口自动化,我个人觉得,性价比是比较高的 4 | 5 | 实现起来简单,维护成本低,容易提高覆盖率等特点 6 | 7 | 接口是稳定的,最多是增加一个字段或者新增接口之类的 8 | 9 | 低成本,有了相对的稳定性,不需要大量重新编写脚本,只需要基础维护包括用例的扩充就 10 | 11 | 可以了执行的快,反馈的速度快 12 | -------------------------------------------------------------------------------- /docs/3-11-你提交的bug,开发不认可怎么办-.md: -------------------------------------------------------------------------------- 1 | ## 3-11-你提交的bug,开发不认可怎么办- 2 | 3 | 首先我会再看需求文档,是不是我的理解有误,如果是我对需求理解错的话我就去关闭bug。 4 | 5 | 如果是bug再去让其他测试人员看看听下他们的意见,然后自己先再三去复测,并目保存好截图和日志,确定这是一个bug之后我就去跟开发说明白,并且给他看bug重现的截图以及日志,如果开发还是不认可的话我就跟产品或项目经理说明白情况。 6 | -------------------------------------------------------------------------------- /docs/6-10-怎么把lnux服务器的文件拷贝到另外一台-linux服务器.md: -------------------------------------------------------------------------------- 1 | ## 6-10-怎么把lnux服务器的文件拷贝到另外一台-linux服务器 2 | 3 | scp要拷贝的文件目标主机ip:/目录/ 4 | 5 | scp startup.sh 192.168.1.157: /home/ 6 | 7 | root@192.168.1.157's password: 8 | 9 | startup.sh 10 | -------------------------------------------------------------------------------- /docs/6-3-日志具体是怎么看的.md: -------------------------------------------------------------------------------- 1 | ## 6-3-日志具体是怎么看的 2 | 3 | 1、我们根据日志目录找到对应的日志文件,用tail -200,或者tail-500查看文件内容 4 | 5 | 也可以重定向导出来查看。 6 | 7 | 如果是系统出现了异常导致的错误,我们跟去查找关键字,比如说error或者 exception等 8 | 9 | 如果是逻辑错误,会把操作对应时间的日志跟对应开发一起去定位bug 10 | -------------------------------------------------------------------------------- /docs/11-9-自动化测试环境的搭建是怎样的-.md: -------------------------------------------------------------------------------- 1 | ## 11-9-自动化测试环境的搭建是怎样的- 2 | 3 | 1、首先要安装 Python 4 | 5 | 2、然后安装编写代码工具 pycharm 6 | 7 | 3、导入 selenium库(pip install seleniun在 pycharm安装 selenium3下载源码包 8 | 9 | 4、下载浏览器驱动(谷歌.火狐等),把驱动程序发到 Python根目录下 10 | -------------------------------------------------------------------------------- /docs/13-4-bytes如何去运行多个文件或者整个目录.md: -------------------------------------------------------------------------------- 1 | ## 13-4-bytes如何去运行多个文件或者整个目录 2 | 3 | 1. 执行多个文件 4 | 5 | pytest.main(["../test_case/test_01","../test_case/test_login"]) 6 | 7 | 2. 执行整个目录 8 | 9 | pytest.main(["../test_case/"]) --列表里是目录路径 10 | -------------------------------------------------------------------------------- /docs/15-11-对于流量具体怎么测-.md: -------------------------------------------------------------------------------- 1 | ## 15-11-对于流量具体怎么测- 2 | 3 | a,首先看在没有操作功能业务的情况下,没操作流量不应该有,或者是流量使用不是很大,就几KB因为app肯能实时刷新消息,比如如果一个登陆,你就使用1M的流量,查询个图片使用3-4M的流量图片,这个肯定流量使用过大 4 | 5 | b,频繁操作同一个业务,流量一直在刷,说明没有使用缓存 6 | 7 | 如何处理:图片过大处理方法:图片压缩传输,要么降低图片分辨率, 8 | -------------------------------------------------------------------------------- /docs/4-1-简单介绍下最近做过的项目.md: -------------------------------------------------------------------------------- 1 | ## 4-1-简单介绍下最近做过的项目 2 | 3 | 根据自己的项目整理完成,要点: 4 | 5 | 1)项目背景、业务、需求、核心业务的流程 6 | 7 | 2)项目架构,B/S还是C/5,数据库用的什么? 中间件用的什么?后台什么语言开发的? 8 | 9 | 是否有做App端,是否有H5是否开发小程序等等。 10 | 11 | 3)项目前端有哪些功能模块,后台有哪些功能模块? 12 | -------------------------------------------------------------------------------- /docs/4-4-你们项目组有多少人、开发多少个、测试多少个-.md: -------------------------------------------------------------------------------- 1 | ## 4-4-你们项目组有多少人、开发多少个、测试多少个- 2 | 3 | [公司具体人数,可以不太清楚,项目组多少一定清楚] 4 | 5 | [这个一定要根据自己的简历项目大小来说,不能乱说] 6 | 7 | 产品1、项目1个、架构师1个、前端3个、后端5个、ios1个、Android 1个、 8 | 9 | 测试3个(测试主管,核心测试人员)、运维1个、UI一个 10 | -------------------------------------------------------------------------------- /docs/13-3-pytest框架如何去生成测试报告.md: -------------------------------------------------------------------------------- 1 | ## 13-3-pytest框架如何去生成测试报告 2 | 3 | 1. 要安装 pytest-html 4 | 5 | pip install pytest-html、在 pycharm里安装 pytest-html、或者源码安装 6 | 7 | 2. 在运行用例模块中执行用例时添加html路径: pytest.main(["要运行的文件的路径","--html=. /report/report.html"]) 8 | -------------------------------------------------------------------------------- /docs/8-2--如何抓取https的包.md: -------------------------------------------------------------------------------- 1 | ## 8-2--如何抓取https的包 2 | 3 | 1、设置 Tools=> Option=>勾选 Decrypt Https traffic=>勾选 lgnore server 4 | 5 | certificate errors(unsafe) 6 | 7 | 2、打开https网页就可以成功抓取了 8 | 9 | 3、还可以 Fiddler添加过滤器(Filters):只抓取指定iP的数据 10 | -------------------------------------------------------------------------------- /docs/3-30-怎么保证测试质量或者你怎么保证你100-覆盖了需求.md: -------------------------------------------------------------------------------- 1 | ## 3-30-怎么保证测试质量或者你怎么保证你100-覆盖了需求 2 | 3 | 把需求了解通透,引用用例评审机制,然后编写测试用例的时候用边界值,用等价类补充一些用例,根据过往经验用错误推断法来追加一些用例,如果存在组合情况的话我会用因果图或者判断表来编写,如果业务场景清晰的情况下我会用流程分析法,如果状态有发生改变的话我就会用状态迁移法。编写用例一个极其考验耐心的事情,要考虑到各种场景,全面覆盖到会出现的场景。 4 | -------------------------------------------------------------------------------- /docs/10-5-比如说你接口的请求参数需要加密处理的,你们用的是什么加密方式,你加密怎么处理的-.md: -------------------------------------------------------------------------------- 1 | ## 10-5-比如说你接口的请求参数需要加密处理的,你们用的是什么加密方式,你加密怎么处理的- 2 | 3 | 这个是有做过的,就拿当我们那个项目的登录接口来讲吧,那个登录的密码是需要进行加密 4 | 5 | 加密之后再进行传输。这里需要问开发要加密算法,我们会把它封装成一个函数,调用这个加密函数对密码加密,之后再进行传递。我们公司的加密算法,大部分用的都是MD5的加密算法(base64) 6 | -------------------------------------------------------------------------------- /docs/14-9-吞吐量与吞吐率跟负载有什么关系-.md: -------------------------------------------------------------------------------- 1 | ## 14-9-吞吐量与吞吐率跟负载有什么关系- 2 | 3 | **吞吐量/率和负载之间的关系:** 4 | 5 | 1、上升阶段:吞吐量随着负载的增加而增加,吞吐量和负载成正比; 6 | 7 | 2、平稳阶段:吞吐量随着负载的增加而保持稳定,无太大变化或波动; 8 | 9 | 3、下降阶段:吞吐量随着负载的增加而下降,吞吐量和负载成反比; 10 | 11 | 总结:吞吐量/率干不过负载!!! 12 | -------------------------------------------------------------------------------- /docs/17-22-fixture装饰器的作用与默认值.md: -------------------------------------------------------------------------------- 1 | ## 17-22-fixture装饰器的作用与默认值 2 | 3 | 可以使用此装饰器(带或不带参数)来定义 fixture功能。 fixture功能的名称可以在以后,使用引用它会在运行测试之前调用它:test模块或类可以使用 pytest.mark.usefixtures 4 | 5 | (fixturename标记。测试功能可以直接使用 fixture名称作为输入参数,在这种情况下,夹具实例从 fixture返回功能将被注入。 6 | -------------------------------------------------------------------------------- /docs/2-9-怎么转行的,毕业之后一直从事软件测试吗.md: -------------------------------------------------------------------------------- 1 | ## 2-9-怎么转行的,毕业之后一直从事软件测试吗 2 | 3 | 非专业 4 | 5 | 1、培训,不要说刚培训出来2019年底开始 6 | 7 | 2、自学,不断一直学习 8 | 9 | 3、家里有关系,带你入行,后面学习过程很勤奋 10 | 11 | 12 | 13 | 计算机相关专业 14 | 15 | 1,实习开始,公司分配到做测试,做测试过程,比较喜欢测试,一直做下来 16 | -------------------------------------------------------------------------------- /docs/20-11-微信里面,如果大家都看不到你发的朋友圈信息,分析下什么原因.md: -------------------------------------------------------------------------------- 1 | ## 20-11-微信里面,如果大家都看不到你发的朋友圈信息,分析下什么原因 2 | 3 | 1、A删除了那条朋友圈信息 4 | 5 | 2、A屏蔽了所有好友查看自己的朋友圈 6 | 7 | 3、如果没有屏蔽,多发几条看看,如果发的所有朋友圈,好友都看不到, 8 | 9 | 也可能是微信后台出问题了,或者A的微信账号有异常等等, 10 | 11 | 不过这种情况不太可能。 12 | -------------------------------------------------------------------------------- /docs/4-2-拿一个你所负责的模块,讲下具体怎么测的-.md: -------------------------------------------------------------------------------- 1 | ## 4-2-拿一个你所负责的模块,讲下具体怎么测的- 2 | 3 | 根据自己的项目整理完成,核心要点: 4 | 5 | 1)拿一个你负责过的模块,核心业务模块讲解 6 | 7 | 2)业务流程是怎样的,需求怎么样,有什么规则没,规则简单介绍 8 | 9 | 3)你是如何分析的,讲明分析思路,测试点,主要怎么考虑测试的,主要核心测试重点在哪里, 10 | 11 | 用了什么测试方法等等。 12 | -------------------------------------------------------------------------------- /docs/9-7--接口文档主要包含哪些内容-.md: -------------------------------------------------------------------------------- 1 | ## 9-7--接口文档主要包含哪些内容- 2 | 3 | 接口文档一般两种形式的,要不就是word版本的要不就是htm的形式,具体内容 4 | 5 | 1.URL(接口地址) 6 | 7 | 2.接口功能 8 | 9 | 3.请求方式:post 10 | 11 | 4.请求参数,以及接口中每个参数的详细说明,类型,是否为必填,约束条件等等 12 | 13 | 5.响应数据及格式,返回码,返回码解释等等 14 | -------------------------------------------------------------------------------- /docs/11-33-数据驱动有没有了解过,具体怎么做的-.md: -------------------------------------------------------------------------------- 1 | ## 11-33-数据驱动有没有了解过,具体怎么做的- 2 | 3 | 1、其实就是把数据与脚本分离,好处就是方便维护管理,后期数据有变动,只要改 excel 4 | 5 | 表的数据就可以,脚本不用动 6 | 7 | 2、封装一个读取 excel表格的函数方法,调用这个函数来读取数据。 8 | 9 | 3、然后利用ddt模型,使用dt内部装饰器来实现数据引用 10 | 11 | 我们当时就是这么做的。 12 | -------------------------------------------------------------------------------- /docs/4-7-你们整个项目写了多少用例,你负责的模块大概写了多少用例-.md: -------------------------------------------------------------------------------- 1 | ## 4-7-你们整个项目写了多少用例,你负责的模块大概写了多少用例- 2 | 3 | [切记己根据自己的项目及负责的模块来] 4 | 5 | 答:这个得根据项目的复杂程度,我们最近做的这个也还好,整个项目写了大概2干3百多条(有点多了),我负责的模块就写了一千多条(你要思考,你负责了哪些模块,大概评估下,不要乱喊)。 6 | 7 | 总结注意点:没有标准答案,先说你的前置条件,再说数据,只要你前置条件和数据匹配即可。 8 | -------------------------------------------------------------------------------- /docs/17-17-打印九九乘法表.md: -------------------------------------------------------------------------------- 1 | ## 17-17-打印九九乘法表 2 | 3 | def print99(): 4 | 5 | for i in range(1,10): #i=0表示打第1行 i=1表示打第2行 i=2表示打第3行 6 | 7 | for j in range(1,i+ 1): 8 | 9 | print(‘%d*%d=%d\t'%(j,i,i*j),end="") 10 | 11 | \#换行 12 | 13 | print(‘’) 14 | -------------------------------------------------------------------------------- /docs/17-3-python序列有哪些-.md: -------------------------------------------------------------------------------- 1 | ## 17-3-python序列有哪些- 2 | 3 | 有序序列:字符串,元组,列表 4 | 5 | 无序序列:字典,集合 6 | 7 | 序列特点: 8 | 9 | ---都可以通过索引得到每一个元素 10 | 11 | ---默认索引值总是从零开始 12 | 13 | ---可以通过切片的方法得到一个范围内的元素的集合 14 | 15 | ---有很多共同的操作符(重复操作符、拼接操作符、成员关系操作符) 16 | -------------------------------------------------------------------------------- /docs/3-17-如何保证质量.md: -------------------------------------------------------------------------------- 1 | ## 3-17-如何保证质量 2 | 3 | (1)需求要吃透,多问,多去了解。 4 | 5 | (2)严格按照测试流程去执行:多考虑用户测试场景,使用测试用例设计方法,多评审。 6 | 7 | (3)要有良好的测试执行:要求用例执行率达到100%,多轮测试,进行探索性测试, 8 | 9 | 需要测试之间交叉测试,用工具来管理我们的测试工作(禅道, testlink, excel,tapd) 10 | 11 | (4)不断的反思与提升。 12 | -------------------------------------------------------------------------------- /docs/4-12-每个阶段测试开发在干嘛(比如你写用例的时候开发在干嘛?).md: -------------------------------------------------------------------------------- 1 | ## 4-12-每个阶段测试开发在干嘛(比如你写用例的时候开发在干嘛?) 2 | 3 | 1)需求阶段,大家都在了解需求 4 | 5 | 2)测试准备, 6 | 7 | 测试编写用例,开发做概要设计,详细设计,然后就是编写代码,编写接口文档,设计文档。 8 | 9 | 3)测试执行阶段, 10 | 11 | 测试人员执行用例,发现bug、提交bug、开发修复bug(开发还有可能在开发未完成的功能) 12 | -------------------------------------------------------------------------------- /docs/9-13--你们接口怎么鉴权的-.md: -------------------------------------------------------------------------------- 1 | ## 9-13--你们接口怎么鉴权的- 2 | 3 | (1)通过用户和密码,auth鉴权 4 | 5 | (2)通过 cookie和 session 6 | 7 | (3)通过 token 8 | 9 | (4)通过sign签名 10 | 11 | 现在app一般是通过 token鉴权,有些是通过把 token放在请求头里面,有些是通过 singn签名这个字段放在body里面去鉴权的,一般的web是通过 session去鉴权的 12 | -------------------------------------------------------------------------------- /docs/11-29-元素定位,有时候定位得到,有时候定位不到,可能是什么原因,你会怎么处理-.md: -------------------------------------------------------------------------------- 1 | ## 11-29-元素定位,有时候定位得到,有时候定位不到,可能是什么原因,你会怎么处理- 2 | 3 | 1、可能是网络问题,导致页面加载延迟,这个可以做延迟等待,一般选择隐式等待,在脚本前面加上 driver.implicitly_wait(20)。 4 | 5 | 2、也有可能是页面结构发生变化导致的,这个时候最好选择通过 xpath或css结合属性进行或者样式定位可能会好点,或者采用 JQuery定位的方式来进行定位元素 6 | -------------------------------------------------------------------------------- /docs/20-10-APP出现崩溃时怎么抓取日志.md: -------------------------------------------------------------------------------- 1 | ## 20-10-APP出现崩溃时怎么抓取日志 2 | 3 | \# adb logcat android studio logcat 4 | 5 | 这种情况我肯定要去看手机端的日志,去分析崩溃日志,通过 adb logcat去直看日志, 6 | 7 | 根据崩溃时间段去查找这个时间段日志,去查看是否有 Error,Exception,Crash,OOM等显 8 | 9 | 现,分析日志,不懂的可以百度查看下原因,然后发给开发处理。 10 | -------------------------------------------------------------------------------- /docs/12-3-Unittest框架的原理-.md: -------------------------------------------------------------------------------- 1 | ## 12-3-Unittest框架的原理- 2 | 3 | Unittest框架有几个大组件,1.测试固件( setUp,tearDown) 4 | 5 | 2.测试用例 3.测试套件 4.加载器 5.运行器 6.测试结果 6 | 7 | 首先我们需要创建测试用例,然后利用加载器讲用例加载到测试套件中,并创建一个执行器, 8 | 9 | 去执行测试条件中的所有用例。 10 | 11 | 它可以帮我们进行管理用例,统计加载执行用例,批量跑用例。 12 | -------------------------------------------------------------------------------- /docs/21-3-你的组员提交的bug开发不认同而吵起来了,你怎么处理.md: -------------------------------------------------------------------------------- 1 | ## 21-3-你的组员提交的bug开发不认同而吵起来了,你怎么处理 2 | 3 | 如果是我的组员跟开发因为提交的bug争吵的时候,我首先会先稳定下他们的情绪,先跟测试沟通为什么吵起来,沟通的时候要先扬后抑,不好的地方的话指出来。确定问题这边具体是什么原因,如果是测试这边的问题,就让测试员把自己的问题处理掉,当然,开发这边也是需要沟通的,说明争吵是不对的,主要是将冋题说明清楚,如果是测试问题可以说明测试这边的问题,如果是开发这边的问题,我会指出开发错误的地方。 4 | -------------------------------------------------------------------------------- /docs/3-8-提bug需要注意哪些问题-.md: -------------------------------------------------------------------------------- 1 | ## 3-8-提bug需要注意哪些问题- 2 | 3 | 1) 不要急着提交,先跟开发说明bug的情况,定位分析下bug。 4 | 5 | 是前端问题还是后端问题再去提交bug。 6 | 7 | 2) 简单明了的概括bug标题,清晰的描述bug重现步骤,分析bug和预期正确结果,附加bug的截图或者日志。描述bug的时候。 8 | 3) 在不能确认该情况是否为bug的时候,可以请教其他人。 9 | 4) 提交完bug以后,后面还要跟踪bug修复情况。 10 | -------------------------------------------------------------------------------- /docs/11-24-如何去定位时间控件.md: -------------------------------------------------------------------------------- 1 | ## 11-24-如何去定位时间控件 2 | 3 | 1、首先js去定位元素,去除元素中的属性:js="$(‘’).removeAttr(要删除的属性) 4 | 5 | 2、然后执行js脚本: driver.execute.script(js) 6 | 7 | 3、然后输入时间日期 8 | 9 | driver.find_element_by_xpath(//[@id=start time]").send keys("2018-12-29 10:55:55)#输入日期 10 | -------------------------------------------------------------------------------- /docs/15-10-对于CPU具体怎么测呢-.md: -------------------------------------------------------------------------------- 1 | ## 15-10-对于CPU具体怎么测呢- 2 | 3 | cpu主要就是看有没有过高,有没有超过我们的指标范围 4 | 5 | 具体是这样做的: 6 | 7 | 首先频繁使用某一个业务,cpu是否逐步增长,最后稳定在一个固定大小的范围,对于一把基础业务,对cpu要求不高的业务,cpu不能超过10%,对于cpu要求比较高的,比如某个业务需要加载地图,大量的图片,视频等的业务,或者需要做大量的数据统计分析的业务, 8 | 9 | 我们要求cpu不能超过20% 10 | -------------------------------------------------------------------------------- /docs/17-23-如何进行异常处理.md: -------------------------------------------------------------------------------- 1 | ## 17-23-如何进行异常处理 2 | 3 | try: 4 | 5 | 执行脚本代码 6 | 7 | except: 8 | 9 | 脚本运行失败执行代码 10 | 11 | 断言错误(AssertionError) 12 | 13 | 其他类型错误(Exception) 14 | 15 | else: 16 | 17 | 没有错误执行的代码 18 | 19 | finally: 20 | 21 | 不管运行成功与否都运行的代码 22 | -------------------------------------------------------------------------------- /docs/8-6--get跟post请求的区别.md: -------------------------------------------------------------------------------- 1 | ## 8-6--get跟post请求的区别 2 | 3 | 1)get请求的参数有长度限制,post没有 4 | 5 | 2)get请求参数在url上传输,post的参数在请求正文中传输。post比get传输更安全 6 | 7 | 3)get只能接收ascall码参数,而post没有限制 8 | 9 | 4)get请求的时候,只请求一次,而post请求两次,第一发送请求头相关信息,第二次 10 | 11 | 再发送请求正文,(只有部分浏览器2次请求) 12 | -------------------------------------------------------------------------------- /docs/9-5--接口测试和平常的Ul测试有什么区别-.md: -------------------------------------------------------------------------------- 1 | ## 9-5--接口测试和平常的Ul测试有什么区别- 2 | 3 | 其实这两者测试的侧重点是不同的,接口因为没有界面,更多考虑后台服务器对请求的,处理逻辑问题,业务交互,检测的是后台“容错机制”是否完整; 4 | 5 | 而ui更多会去关注页面展示,数据转换,界面排序这些功能,当然也会后台数据处理的问题,ui测试其实已经包含了接口测试。系统功能的用例更全面,不仅有界面的,也有业务功能用例,还有其他用户场景的用例功能入口用例,流程用例,而接口测试主要根据各种入参场景来设置用例。 6 | -------------------------------------------------------------------------------- /docs/1-2-离线版本说明.md: -------------------------------------------------------------------------------- 1 | # 离线版本百度云上传后总是失效,改为自行领取 2 | 3 | > 为了方便在无网络或者弱网络情况下能够正常学习。 4 | > 5 | > 有大侠整理里离线版本,需要的自行领取。 6 | 7 | 领取入口:[两个离线版本(Pdf / Word)](https://wtnjm.xet.tech/s/4fmrTx ) 8 | 9 |  10 | 11 | -------------------------------------------------------------------------------- /docs/11-17--xpath定位的方法--xpath怎么写-.md: -------------------------------------------------------------------------------- 1 | ## 11-17--xpath定位的方法--xpath怎么写- 2 | 3 | Xpath写法://*div[@id=’u1’]/a[7] #相对路径 4 | 5 | Xpath写法:/html/boy/div[1l/div/div/divl3/a[7 #绝对路径 6 | 7 | \#先找父元素,结合属性 8 | 9 | Find_element_by_xpath(//div(@id=u1"/a[@name=tj_login]) 10 | -------------------------------------------------------------------------------- /docs/13-10-allure报告生成.md: -------------------------------------------------------------------------------- 1 | ## 13-10-allure报告生成 2 | 3 | 1,先安装一个allure包用 pip install allure-pytest 4 | 5 | 2,运行脚本-s,-d生成报告的目录,一般是一些json文件 6 | 7 | 3,下载allure生成工具,配置环境变量 8 | 9 | 4,运行命令: allure generate ./allurereport/-o ./reporthtml/--clean, 10 | 11 | 生成html的 allure报告 12 | -------------------------------------------------------------------------------- /docs/20-7-如果时间比较紧的话,你怎么安排你的工作.md: -------------------------------------------------------------------------------- 1 | ## 20-7-如果时间比较紧的话,你怎么安排你的工作 2 | 3 | 首先要评估下风险,比如说,可能我根本做不完,风险太大,那么这个我首先要把风脸提出来,给对应的领导,那么我会要求有人协助我完成,需要多少人力来完成, 4 | 5 | 如果只是说,正常时间完不成,那么我可以提下加班,看加班这个时间段能否完成,如果可以,我会和老大商量,提出加班计划, 6 | 7 | 如果是其他的,比如说我只需要把优先级高的工作完成,其他工作可以安排到下一个版本去做,那么我就做个计划,把计划个老大说下。 8 | -------------------------------------------------------------------------------- /docs/11-52-对于生成的自动化测试报告如何分析-.md: -------------------------------------------------------------------------------- 1 | ## 11-52-对于生成的自动化测试报告如何分析- 2 | 3 | 1、主看总共执行了多少用例,通过了多少,失败了多少,错误了多少。 4 | 5 | 2、对于错误的用例,基本都脚本问题,查看报告中的日志详细信息,看具体哪个位置出错了.针对性去进行调试,修改。 6 | 7 | 3、对于失败的用例,也是首先看报告中的日志,看具体哪个位置出错了,一般首先怀疑自己的脚本,先确定脚本是否有问题,如果脚本没有问题,那可以确定就是Bug了,提Bug即可 8 | 9 | \#其他问题 10 | -------------------------------------------------------------------------------- /docs/4-5-测试人员怎么分工的-.md: -------------------------------------------------------------------------------- 1 | ## 4-5-测试人员怎么分工的- 2 | 3 | 1)我们测试组3人,1个测试组长,2个测试,一般都是根据需求的复杂程度大小来, 4 | 5 | 尽量是自己熟悉哪个版块的就继续做那个版块。 6 | 7 | 2)比如:我这边主要是负责前端大部分的功能模块,还有接口测试跟ui自动化测试,另一个同事主要是功能测试这边,组长这边也负责一些功能测试,包括一些性能跟安全测试。 8 | 9 | 3)其实测试工作也划分的没有那么细,后期我们也会做交叉测试,相互测试功能,性能跟安全测试我也会参与一下。 10 | -------------------------------------------------------------------------------- /docs/8-16-post申请方式,用get会报什么错误。.md: -------------------------------------------------------------------------------- 1 | ## 8-16-post申请方式,用get会报什么错误。 2 | 3 | 404 Not Found 4 | 5 | 请求失败,请求所希望得到的资源未被在服务器上发现,没有信息能够告诉用户这个状况到底是暂时的还是永久的,假如服务器知道情况的话,应当使用410状态码来告知旧资源因为某些内部的配置机制问题,已经永久的不可用,而且没有任何可以跳转的地址,404这个状态码被广泛应用于当服务器不想揭示到底为何请求被拒绝或者没有其他适合的响应可用的情况下,出现这个错误的最有可能的原因是服务器端没有这个页面。 6 | -------------------------------------------------------------------------------- /docs/8-8--为什么要使用cookie和session:http是无状态协议.md: -------------------------------------------------------------------------------- 1 | ## 8-8--为什么要使用cookie和session:http是无状态协议 2 | 3 | 第一次登录,发送用户信息给到服务器,服务器把用户信息保存在session中服务器响应数据给客户端,响应数据中有包含session的先关用户信息 4 | 5 | 客户端接收到服务器session信息,把session中相关的用户信息保存在cookie中 6 | 7 | 第二次登录,客户端发送请求,并携带cookie,服务端可以直接验证cookie值,如果用户已经登录过,可以免登录 8 | -------------------------------------------------------------------------------- /docs/9-21--对于POST请求,要求传递Json格式数据,-JMeter怎么做.md: -------------------------------------------------------------------------------- 1 | ## 9-21--对于POST请求,要求传递Json格式数据,-JMeter怎么做 2 | 3 | 对于这个其实在 JMeter的http请求这个组件中的参数配置栏目中,第二个栏目有个消息体数据,我们把需要上传的参数组装成json格式,然后编写到 body data里面,然后,需要在http信息头管理其中,需要将数据格式设置为json格式,这个就是设置Content-Type 4 | 5 | 为 application/json:charset=utf-8,这样就可以了。 6 | -------------------------------------------------------------------------------- /docs/11-25-弹出框的操作-.md: -------------------------------------------------------------------------------- 1 | ## 11-25-弹出框的操作- 2 | 3 | 弹出框一般有三种:警告消息框,确认对话框,提示消息框 4 | 5 | 在 selenium中提供了一个方法 switch_to.alert,跳转到对话框上面去对alert对话框进行操作的函数/法 6 | 7 | Accept() #点击确定按钮 8 | 9 | Dismiss() #点击取消按钮 10 | 11 | Text #获取对话框上的文本信息 12 | 13 | Send_keys() #输入内容 14 | -------------------------------------------------------------------------------- /docs/12-2-Web-UI自动化都用到过哪些库-.md: -------------------------------------------------------------------------------- 1 | ## 12-2-Web-UI自动化都用到过哪些库- 2 | 3 | Selenium库 里面封装了丰富的对浏览器,页面元素进行操作的方法。 4 | 5 | Xlrd库 主要用来实现对excel表格数据进行读取的APl 6 | 7 | Pymysql库 主要用来操作数据库的 8 | 9 | Ddt库 主要用来实现数据驱动的 10 | 11 | Re库 主要用来提取html页面数据的 12 | 13 | Unittest库 主要用来编写用例,管理用例,执行用例的。 14 | -------------------------------------------------------------------------------- /docs/20-12-微信里面,如果只是B看不到,其他朋友都可以看到,分析下什么原因.md: -------------------------------------------------------------------------------- 1 | ## 20-12-微信里面,如果只是B看不到,其他朋友都可以看到,分析下什么原因 2 | 3 | 1、B把A拉黑了 4 | 5 | 2、A把B拉黑了 6 | 7 | 3、B设置了不查看a的朋友圈 8 | 9 | 4、A设置了屏蔽B看到自己的朋友圈,或者A屏蔽了自己所有的朋友圈 10 | 11 | 5、A删除了那条朋友圈信息 12 | 13 | 6、A设置了只展示某个时间段的朋友圈信息 14 | 15 | 7、B根本就不是A的微信好友 16 | -------------------------------------------------------------------------------- /docs/9-9--你怎么去检查,分析.md: -------------------------------------------------------------------------------- 1 | ## 9-9--你怎么去检查,分析 2 | 3 | 我们主要是根据入参情况,去看接口的返回值,对于返回值,我主要关注的几个点:1.状态码 4 | 5 | 2.提示信息3.返回数据的具体内容。根据接口文档的说明去检查这个3个点是否满足接口需求文档,4.有些如果要检查数据库的,就连接数据库获取数据与返回的数据做对比。 6 | 7 | 如果不满足就是有问题,如果满足则通过,如果有Bug我们会先大概分析下,是什么原因, 8 | 9 | 并进行复测,如果还是有问题,提交Bug给开发,让开发修复,之后再回归测试 10 | -------------------------------------------------------------------------------- /docs/10-10--jmeter中如何跨线程组传输参数.md: -------------------------------------------------------------------------------- 1 | ## 10-10--jmeter中如何跨线程组传输参数 2 | 3 | 正则表达式或者边界值提取器或者JSON Extractor提取的值 4 | 5 | 后置处理器- beanshell处理器 6 | 7 | 定义成全局变量 8 | 9 | ${_setProperty(newtoken,${access_token},)} 10 | 11 | 其他线程组,引入变量值 12 | 13 | ${_P(newtoken,)}或者${_property(newtoken,)} 14 | -------------------------------------------------------------------------------- /docs/20-8-返回数据现在有问题,怎么排查问题-.md: -------------------------------------------------------------------------------- 1 | ## 20-8-返回数据现在有问题,怎么排查问题- 2 | 3 | 这个可能需要抓包,首先抓包看下前后台的数据交互情况,确认下是不是前端请求发送,有问题导致返回数据有问题。如果是请求有问题,那提Bug给前端,让前端修复, 4 | 5 | 如果请求没有问题,与接口文档对比,查看下返回数据具体是哪里出问题了,这里还得,首先查看下数据库,看是不是数据库中本身数据就有问题,如果数据库数据没有问题,那可能是后台代码问题,这个时候可以查看下后台的日志文件,通过分析日志文件的错误信息排 6 | 7 | 查具体什么原因导致问题出现 8 | -------------------------------------------------------------------------------- /docs/3-15-测试中,如何判断是前端的bug还是后端的bug呢-.md: -------------------------------------------------------------------------------- 1 | ## 3-15-测试中,如何判断是前端的bug还是后端的bug呢- 2 | 3 | 通常可以利用抓包工具来进行分析。可以从三个方面进行分析:请求接口、传参数、响应。 4 | 5 | 1)请求接口un是否正确如果请求的接口ur错误,为前端的bug 6 | 7 | 2)传参是否正确如果传参不正确,为前端的bug 8 | 9 | 3)请求接口u和传参都正确,查看响应是否正确如果响应内容不正确,为后端bug 10 | 11 | 4)也可以在浏览器控制台输入js代码调试进行分析 12 | -------------------------------------------------------------------------------- /docs/3-9--bug怎么管理的,bug的生命周期或者是bug的状态.md: -------------------------------------------------------------------------------- 1 | ## 3-9--bug怎么管理的,bug的生命周期或者是bug的状态 2 | 3 | 原来bug是用禅道来管理的 4 | 5 | 原来我们公司bug,提交bug直接给对应的开发人员,对应开发人员修复完成,交给测试复测, 6 | 7 | 复测通过关闭bug,不通过打回给对应开发。 8 | 9 | 提交-开发人员(已激活未确认)-开发进行确认,状态变成已激活,已确认,开发修复完成, 10 | 11 | 标注状态是已修复,测试人员复测通过,已关闭,打回给对应开发,已经激活。 12 | -------------------------------------------------------------------------------- /docs/4-8-最近的版本写了多少用例-.md: -------------------------------------------------------------------------------- 1 | ## 4-8-最近的版本写了多少用例- 2 | 3 | (总结注意点:没有标准答案,先说你的前置条件,再说数据,只要你前置条件和数据匹配即可 4 | 5 | 特别注意:你如果是半个月的版本,一般给你两天写用例,你自己评估下写多少。 6 | 7 | 半个月的版本:1-2天需求分析,1-2天写用例,1天评审用例,其余的时间就是执行回归bug,编写测试报告) 8 | 9 | 最近的版本因为没有特别的用户活动,产品那边也没有给特别大的改动需求,我负责的 10 | 11 | 有5个模块吧,大概有180多条用例。 12 | -------------------------------------------------------------------------------- /docs/11-30-对于不可见-隐藏的元素,你如何定位,如何处理-.md: -------------------------------------------------------------------------------- 1 | ## 11-30-对于不可见-隐藏的元素,你如何定位,如何处理- 2 | 3 | 我们可以通过 javaScript 修改 display的值,来实现 4 | 5 | \#修改元素的属性 6 | 7 | \#我们需要通过 javaScript修改 display的值。 8 | 9 | js='document.querySelectorAll('select')[1].style.display="block";’ 10 | 11 | driver.execute_script(js) 12 | -------------------------------------------------------------------------------- /docs/11-35-随机数如何操作?.md: -------------------------------------------------------------------------------- 1 | ## 11-35-随机数如何操作? 2 | 3 | 1.首先都要 import random 4 | 5 | 随机整数: random randint(10002000),有时需要转化成字符串类型: 6 | 7 | str(random randint(1000, 2000)) 8 | 9 | 随机字符串:"join( random.sample(‘abcdefghijk’6)),有时前面固定字母了: 10 | 11 | 'ldh'+".join(random sample(‘abcdefghijk’,6)) 12 | -------------------------------------------------------------------------------- /docs/17-14-如何将字符串转换为小写-.md: -------------------------------------------------------------------------------- 1 | ## 17-14-如何将字符串转换为小写- 2 | 3 | S = "What is Your Name?" 4 | 5 | print(s.lower()) #返回小写字符串 6 | 7 | print(s.upper()) #返回大写字符串 8 | 9 | print(s.capitalize()) #字符串首字符大写 10 | 11 | print(s.title()) #每个单词的首字母大写 12 | 13 | pint(s.swapcase()) #大小写互换 14 | -------------------------------------------------------------------------------- /docs/18-1-白盒测试怎么测.md: -------------------------------------------------------------------------------- 1 | ## 18-1-白盒测试怎么测 2 | 3 | 原来工作中,没有涉及过,但是了解过 4 | 5 | 1、静态扫描 6 | 7 | 2、动态检查,构造测试数据去检查,语句覆盖---覆盖所有的代码 8 | 9 | 3、判定覆盖覆盖每个判定条件,每个判定都需要 真假值 10 | 11 | 4、条件覆盖每个条件 都需要一个真假值 12 | 13 | 5、判定/条件覆盖 14 | 15 | 6、组合覆盖,条件之间的组合场景 ---重点 16 | 17 | 7、路径覆盖----后面黑盒流程分析法 ---重点 18 | -------------------------------------------------------------------------------- /docs/8-7--http跟https的区别.md: -------------------------------------------------------------------------------- 1 | ## 8-7--http跟https的区别 2 | 3 | 1.https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用 4 | 5 | 2.http是超文本传输协议,信息是明文传输https则是具有安全性的ssl加密传输协议 6 | 7 | 3.http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443 8 | 9 | 4.http的连接很简单,是无状态的;Https协议是由SSL + HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。 10 | -------------------------------------------------------------------------------- /docs/13-1-自动化测试使用的那些库.md: -------------------------------------------------------------------------------- 1 | ## 13-1-自动化测试使用的那些库 2 | 3 | 1、selenium库 --web自动化测试工具 2. priest框架,运行用例 3. random随机,概率 4 | 5 | 4. xlrd --获取exell表数据 5. pymysql调用数据库 6. pytest-html --生成html文件 6 | 5. yagmanil --发送邮件 8. time-时间 9. Select包--下拉框 10. Keys 模拟键盘操作 7 | 6. Webdriverwait智能等待 12. Action Chains模拟鼠标操作 8 | -------------------------------------------------------------------------------- /docs/13-2--pytest框架如何使用.md: -------------------------------------------------------------------------------- 1 | ## 13-2--pytest框架如何使用 2 | 3 | 1. 安装 pytest框架 4 | 5 | pip install pytest、在 pycham里安装 pytest、源码安装 6 | 7 | 2. 导入 pytest: import pytest 8 | 3. 编写主函数,后续代码,后面运行: if_name_=='_main_’; 9 | 4. 执行文件: 10 | 11 | pytest.main(["要运行的文件的相对路径"]) ----例如(["../test_case/test_01.py"]) 12 | -------------------------------------------------------------------------------- /docs/3-31-一个需求,7天要上线,你怎么做?.md: -------------------------------------------------------------------------------- 1 | ## 3-31-一个需求,7天要上线,你怎么做? 2 | 3 | 先跟面试官确定,产品什么是转测; 4 | 5 | 1)如果转测时间,在最近1-2天,直接了解需求开始测试。 6 | 7 | 2)如果三天后转测,一天半时间了解需求,一天写测试点和写测试用例,一天进行评审和修改测试用例,2天执行试用例与理交bug,最后一天半进行回归测试与编写测试报告。 8 | 9 | 3)如果4-5天后进行转测试,边开发边测试,一天半时间了解需求,一天写测试点和写测试用例,一天进行评审和修改测试用例,开始执行测试,开发一部分,我们就测试一部分。 10 | -------------------------------------------------------------------------------- /docs/4-3-你在这个项目里面主要做了些什么工作?.md: -------------------------------------------------------------------------------- 1 | ## 4-3-你在这个项目里面主要做了些什么工作? 2 | 3 | 1)在这个项目中,主要是以功能测试跟后台接口测试为主,主要参加了需求评审会议,用例的编写, 4 | 5 | 参与用例的评审,执行测试。 6 | 7 | 2)协助开发定位问题解决发现的bug,编写测试报告,协助上线。 8 | 9 | 3)另外就是做了APP的一些相关项测试,像兼容性测试、稳定性测试、安装卸载版本覆盖测试和app性能都是有做过的,例外后期有做过接口自动化等。主要就是做了这些工作。 10 | 11 | [这个具体根据你自己的简历上写的来说] 12 | -------------------------------------------------------------------------------- /docs/9-32-http如何进行代理录制接口.md: -------------------------------------------------------------------------------- 1 | ## 9-32-http如何进行代理录制接口 2 | 3 | 首先在 jmeter中有一个非测试计划,添加一个http代理服务器,代理服务器的端口设置为8888,当然也可以选择一个没有使用过的端口就可以了,然后启动http代理服务器然后对于要录制web端的接口需要在浏览器设置代理就可以录制,默认ip为 localhost端口8888 4 | 5 | 对于要录制手机端的接口 6 | 7 | 1.保证手机与电脑在同一个网络 8 | 9 | 2.设置手机端代理 10 | 11 | 默认ip为pc机器的ip地址,端口8888 12 | -------------------------------------------------------------------------------- /docs/17-21-python中生成随机整数、随机小数、0-1之间小数方法.md: -------------------------------------------------------------------------------- 1 | ## 17-21-python中生成随机整数、随机小数、0-1之间小数方法 2 | 3 | import random 4 | 5 | \#生成1到100之间的随机整数 6 | 7 | print(random.randint(1,100)) 8 | 9 | \#生成0-1之间随机的小数 10 | 11 | print(random.random()) 12 | 13 | \#生成随机小数, randn(3)代表生成三个 14 | 15 | print(np.random.randn(3) 16 | -------------------------------------------------------------------------------- /docs/2-5-你的职业发展规划和职业目标.md: -------------------------------------------------------------------------------- 1 | ## 2-5-你的职业发展规划和职业目标 2 | 3 | 根据公司况,个人原因来说:看公司的岗位要求,招岗位就是攻能 4 | 5 | 公司只做功能测过 6 | 7 | 接下来一年时间内,更加完善自己的功能测试,2-3年内熟自动化或者性能, 8 | 9 | 3-5年内系统成为自动化或者性能,成为资深技术人员 10 | 11 | 公司做自动化与性能测试 12 | 13 | 1-2年内熟恐自动化或者性能,3-5系统成为自动化或者性能,成为资深技术人员性能与自动测试 14 | 15 | 找一个比较稳定平台,跟公司长期发展,后期走管理或者产品路线 16 | -------------------------------------------------------------------------------- /docs/5-1-打电话功能怎么去测?.md: -------------------------------------------------------------------------------- 1 | ## 5-1-打电话功能怎么去测? 2 | 3 | 我们会从几个方面去测试:界面、功能、兼容性、易用性、安全、性能、异常。 4 | 5 | 1)界面我们会测试下是否跟界面原型图一致,考虑浏览器不同显示比例,屏幕分辨率。 6 | 7 | 2)功能:给不同人员打电话,不同号码打电话,不同运营商,测试每个按钮是否正常使用,拨打号 码,是输入还是,复制过程,还是其他地方跳转过来,多次拨打电话,双卡选择不同电话卡。 8 | 9 | 3)兼容性:不同手机型号,厂商,不同系统版本,屏幕大小,分辨率,内存大小 10 | 11 | 4)易用性:操作是否说的越多越好 12 | -------------------------------------------------------------------------------- /docs/11-15-jQuery定位的方法.md: -------------------------------------------------------------------------------- 1 | ## 11-15-jQuery定位的方法 2 | 3 | 1. driver.execute_script("$(#id定位值)vaC")")-输入值a()处也可以用cick()表示点击 4 | 2. driver.execute_script("$(name=name定位值va(")输入值 5 | 3. driver.execute_script("$(cas定位值)va()")输入值 6 | 4. driver.execute_script("$((class=]").val().) 7 | 5. driver. execute script ("SCIvalue= ]").val()") 8 | -------------------------------------------------------------------------------- /docs/11-4-自动化测试流程是什么-.md: -------------------------------------------------------------------------------- 1 | ## 11-4-自动化测试流程是什么- 2 | 3 | 1、前期项目组会评估项目是否合适做自动化测试,例外就是看下哪些模块需要做自动化,适合做 4 | 5 | 2、人员安排,分工 6 | 7 | 3、确定测试框架 8 | 9 | 4、各自领取自己负责模块(根据功能来进行划分,功能测试的模块) 10 | 11 | 整理功能模块的用例,把能做自动化的用例提炼出,规整成自动化用例文档, 12 | 13 | 准备数据,整理数据,管理 14 | 15 | 资源,环境的准备 16 | 17 | 5、搭建测试环境 18 | 19 | 6、脚本开发 20 | -------------------------------------------------------------------------------- /docs/15-15-App交互性怎么做的-.md: -------------------------------------------------------------------------------- 1 | ## 15-15-App交互性怎么做的- 2 | 3 | 交互性这块,主要从以下几个方面去考虑测试的是: 4 | 5 | 1. 看我们软件与其他应用软件的同时运行来回切换是否有问题 6 | 2. 看软件切换到后台一段时间,再切换到前端,或者前后台来回切换, 7 | 8 | 软件是否会有异常,比如:进程被杀死,或者切换到前端页面出现问题,或者页面数据丢失等等。 9 | 10 | 3. 看软件被在使用过程中被其他应用中断,或者其他意外情况中断,比如:来电,来短信,闹铃,低电量测试等,还要注意手机端硬件上,如:待机,锁屏,插拔数据线,耳机等操作不会影响客户端。 11 | -------------------------------------------------------------------------------- /docs/4-10-在uat测试的时候,突然客户临时要大量的数据.md: -------------------------------------------------------------------------------- 1 | ## 4-10-在uat测试的时候,突然客户临时要大量的数据 2 | 3 | **备注说明:**uat:测试人员提供用例,uat环境已搭建好,他就开始来执行,如果发现问题, 4 | 5 | 需要协助,谁负责这个需求,就找对应的人,发现bug,提交到uat版本里面,修复完了, 6 | 7 | 客户需要回归验证的,我们公司只是辅助他去执行测试。 8 | 9 | **答案:** 10 | 11 | 看他需要的数据能不能从上个版本,或者生产环境导入数据进来测试,如果没有,我们看能不能 批量修改数据去测试,如果不行,我们只能通过存储过程造数据了。 12 | -------------------------------------------------------------------------------- /docs/17-15-现场出了一个100-10000之间,打印出各位数字相加能被15整除的整数,每行打印十个.md: -------------------------------------------------------------------------------- 1 | ## 17-15-现场出了一个100-10000之间,打印出各位数字相加能被15整除的整数,每行打印十个 2 | 3 | def chu(strum,endnum) 4 | 5 | sum = 0 6 | 7 | for i in range(strum,endnum): 8 | 9 | if i%15 == 0; 10 | 11 | sum=sum+1 12 | 13 | print(i,’,’) 14 | 15 | if sum%10==0 16 | 17 | pint(‘/n’) 18 | -------------------------------------------------------------------------------- /docs/12-1-你们自动化用例是怎么管理的-.md: -------------------------------------------------------------------------------- 1 | ## 12-1-你们自动化用例是怎么管理的- 2 | 3 | 1. 所有用例都是放在 test_case的目录下的统一管理的。 4 | 2. 每个某块一个.py文件,数据独立放在excel表格中 5 | 3. 所有的具体用例脚本都是依据 unittest来编写的,利用ddt模型的装饰器来引用数据 6 | 4. 然后跑用例这块,主要用的是 unittest框架来统一加载用例,并执行用例的. 7 | 8 | 如果要全量跑,调用 unittest中的 defaultTestLoader.discover这个函数来 9 | 10 | 加载 test_case目录下的所有.py文件。 11 | -------------------------------------------------------------------------------- /docs/11-34-参数化的类型有哪些-自动化脚本如何实现数据的参数化-.md: -------------------------------------------------------------------------------- 1 | ## 11-34-参数化的类型有哪些-自动化脚本如何实现数据的参数化- 2 | 3 | 把测试数据,通过变量或者文件进行保存,通过修改文件或者变量,达到数据参数化目的 4 | 5 | 测试过程,减低数据维护成本 6 | 7 | 1、像测试用例数据这块,我们都是放在 excel表格中的 8 | 9 | 2、常用的变化比较小的配置数据,比如数据库连接的配置,报告的路径,用例的路径等等 10 | 11 | 这些放在config配置文件中,利用全局变量来管理的。对于全局变量的数据,直接导入config某块,调用就可以。目的是以便于测试数据改变时,直接修改变量就行了 12 | -------------------------------------------------------------------------------- /docs/3-23-有没有写过测试报告,具体包括哪些内容-.md: -------------------------------------------------------------------------------- 1 | ## 3-23-有没有写过测试报告,具体包括哪些内容- 2 | 3 | 参考答案1: 4 | 5 | 1)项目背景和目的 2)测试用例设计 3)测试环境 4)测试过程用到的工具 6 | 7 | 5)测试范围 6)测试用例执行情况 7)测试缺陷分析和总结 8)测试结果 8 | 9 | 参考答案2: 10 | 11 | 这个是写过的,测试报告,其实就是把我们测试的整个过程情况,数据统计,做成报告,包括用例执行情况,测试了哪些模块,多少用例,会哪里模块,自动化通过率,自动化跑了多少,是否全部通过,发现了多少bug,bug的情况,是否遗漏bug,测试结论等等这些,基本就这些。 12 | -------------------------------------------------------------------------------- /docs/8-4-网络协议了解多少-.md: -------------------------------------------------------------------------------- 1 | ## 8-4-网络协议了解多少- 2 | 3 | 原来我们用得比较多的协议是http和https以及tcp协议 4 | 5 | http和https都是超文本协议,浏览器发送数据请求基本用的都是他们,不同的是https 6 | 7 | 在http的基础上增加了ssl加密协议,http的默认端口是80,http:的默认端口是443, 8 | 9 | https收费,http免费。 10 | 11 | tcp协议的话,作用在传输层,在发送请求前会有三次握手,是面向连接的协议,传输过程比较可靠 12 | 13 | udp协议的话,作用在传输层,面向非连接协议,传输过程相对tcp不可靠,传输大量数据 14 | -------------------------------------------------------------------------------- /docs/11-27--有没有修改过页面元素的属性,具体怎么修改-.md: -------------------------------------------------------------------------------- 1 | ## 11-27--有没有修改过页面元素的属性,具体怎么修改- 2 | 3 | 有的,有时候我们会碰到一些元素不可见,这个时候 selenium就无法对这些元素进行操作了。例如,下面的情况:页面主要通过“display.none”来控制整个下拉框不可见。这个时候如果直接操作这个下拉框,就会提示:我们需要通过 javaScript修改 display的值 4 | 5 | 具体修改方式如下: 6 | 7 | js='document.queryselectorAll(‘select’)[1].style.display="block";’ 8 | 9 | driver.execute_script(js) 10 | -------------------------------------------------------------------------------- /docs/6-7-linux常见命令有哪些,说出10条左右.md: -------------------------------------------------------------------------------- 1 | ## 6-7-linux常见命令有哪些,说出10条左右 2 | 3 | 查看实时日志:tall 、 head -20 查看前20行 、 tail -20 查看前20行 4 | 5 | 查看进程:ps -ef 、查看当前系统端口:netstat -an 、查看哪些端口被打开:netstat -anp 6 | 7 | 重启数据库服务:systemctl restart mysql service 8 | 9 | 重启网卡:service network restart 10 | 11 | 解压包:.zip包 unzip 包名 .tar tar -xzf 包名 12 | 13 | 在线安装用 yun 14 | -------------------------------------------------------------------------------- /docs/7-2-存储过程是怎么编写的.md: -------------------------------------------------------------------------------- 1 | ## 7-2-存储过程是怎么编写的 2 | 3 | delimiter∥ 4 | 5 | create procedure存储过程名(n int) 6 | 7 | BEGIN 8 | 9 | declare i int default 0; 10 | 11 | while i <= n do 12 | 13 | Insert into表名 values(值1,值2...) 14 | 15 | set i=i+1; 16 | 17 | end while; 18 | 19 | end∥ 20 | 21 | delimiter; 22 | 23 | cal存储过程名(数据量(n)); 24 | -------------------------------------------------------------------------------- /docs/9-44-request框架有哪些方法-.md: -------------------------------------------------------------------------------- 1 | ## 9-44-request框架有哪些方法- 2 | 3 | 像用来发送请求的一般都是调用以下方法 4 | 5 | reponse=requests.get() 6 | 7 | reponse=requests.post() 8 | 9 | 获取响应数据一般都是调用以下方法 10 | 11 | reponse.status_code 12 | 13 | reponse.reason 14 | 15 | reponse.text 16 | 17 | reponse.json() 18 | 19 | reponse.headers 20 | 21 | reponse.cookies 22 | -------------------------------------------------------------------------------- /docs/20-6-项目快上线因为开发延迟,测试时间被压缩怎么做?.md: -------------------------------------------------------------------------------- 1 | ## 20-6-项目快上线因为开发延迟,测试时间被压缩怎么做? 2 | 3 | [开发延期完成,产品还需如期上线,测试需怎么办 4 | 5 | 首先看下自己还剩下多少时间,然后要评估工作量,评估下风险,比如说,可能我根本做不完,风险太大,那么这个我首先要把风险提出来,给对应的领导,那么我会要求有人协助我完成,需要多少人力来完成, 6 | 7 | 如果只是说,正常时间完不成,那么我可以提下加班,看加班这个时间段能否完成,如果可以,我会和老大商量,提出加班计划。 8 | 9 | 如果是其他的,先跟领导确认,比如说我只需要把优先级高的工作完成其他工作可以安排到下一个版本去做,那么我就做个计划,把计划个老大说下。 10 | -------------------------------------------------------------------------------- /docs/11-14-js定位的5个方法.md: -------------------------------------------------------------------------------- 1 | ## 11-14-js定位的5个方法 2 | 3 | js用到css定位 4 | 5 | 1. driver.execute_script("document.getElenmentByld().value='';") 6 | 2. driver.execute_script("document.getElenmentByName().value='';") 7 | 3. driver.execute_script("document.getElenmentsByClassName()[0].value='';") 8 | 4. driver.execute_script("document.getElenmentsByTagName()[0].value='';") 9 | -------------------------------------------------------------------------------- /docs/14-6-有没有写过性能测试报告,具体包括哪些内容.md: -------------------------------------------------------------------------------- 1 | ## 14-6-有没有写过性能测试报告,具体包括哪些内容 2 | 3 | 性能测试报告,需要每次 Jmeter压测完成的html报告的数据跟nmon工具监控的数据,整理出一份性能测试报告,性能测试报告,主要包含: 4 | 5 | 1,测试资源(环境,测试数据,表里面需要多少数据,测试工具) 6 | 7 | 2,测试设计(测试业务,测试类型,测试时间,并发用户数) 8 | 9 | 3,测试分析(每一个场景都需要分析) 10 | 11 | 4,测试结论(能不能上线,不上线的原因) 12 | 13 | 5,优化和建议 14 | 15 | 6,测试通过的标准,平均响应时间<5s,资源利用率<75%,事务失败率<5% 16 | -------------------------------------------------------------------------------- /docs/3-16-项目上线后发现bug,测试人员应该怎么办.md: -------------------------------------------------------------------------------- 1 | ## 3-16-项目上线后发现bug,测试人员应该怎么办 2 | 3 | 看严重级别:严重还是不严重 4 | 5 | 严重的:紧急变更上线 6 | 7 | 不严重:修复好后跟下个版本一起上线 8 | 9 | 用户会通过运维反馈到项目组这边,项目经理会根据功能模块的负责人,分给对应的开发与测试。 10 | 11 | 测试人员:编写对应的测试用例、测试环境中重现bug、提交bug、 12 | 13 | 交给开发进行修复、修复完成bug、进行bug的复测。 14 | 15 | 如果测试环境无法重现,可以导入生产环境的包到测试环境中测试, 16 | 17 | 还是不能复现,查看生产环境的日志去定位问题。 18 | -------------------------------------------------------------------------------- /docs/5-11-给你一个界面怎么测.md: -------------------------------------------------------------------------------- 1 | ## 5-11-给你一个界面怎么测 2 | 3 | 这个具体看什么界面了,首先要搞清楚界面上有哪些功能点,一定要弄清楚哪些是展示性的信息,哪些可操作性的东西。然后从上到下根据界面上的一些功能进行逐一测试。具体的话: 4 | 5 | 1)首先肯定是做界面ui测试,主要检查看界面布局是否合理,是否美观,图片,颜色,字体,超链接,是否都显示正确,界面数据是否展示正常等等。 6 | 7 | 2)然后根据界面上的各个功能点需求逐一检查,各个功能是否有问题。 8 | 9 | 3)考虑到时界面,所以得考虑兼容性问题,对于Web端要不同的浏览器展示问题,浏览器缩放比例问题,不同屏幕大小问题,看是否都能正常展示,对于App端当然要考虑不同的手机屏幕大小,分辨率等等。 10 | -------------------------------------------------------------------------------- /docs/17-10-字典如何删除键和合并两个字典-.md: -------------------------------------------------------------------------------- 1 | ## 17-10-字典如何删除键和合并两个字典- 2 | 3 | 字典dic1={‘name’:’laowang’,’age’:’18’}, 4 | 5 | dic2=(‘name’:’Xiaohua’},删除dic1中键名为’name’的键,并合并dc1和dic2 6 | 7 | 1) 删除键名为name的键 8 | 9 | dic1={‘name’:’laowang’,’age’:’18’} 10 | 11 | del dic1[‘name’] 12 | 13 | 2) 合并两个字典,使用字典的成员方法 update() 14 | 15 | dic2.update(dic1) 16 | 17 | print(dic2) 18 | -------------------------------------------------------------------------------- /docs/10-17--requests中如何进行动态关联.md: -------------------------------------------------------------------------------- 1 | ## 10-17--requests中如何进行动态关联 2 | 3 | 1,如果返回的是 cookies值,可以直接返回接口的 r.cookies 4 | 5 | 2,返回的是str类型数据,可以导入re模块进行正则表达式提取返回数据格式是json格式, 6 | 7 | 导入json,把json数据格式转化 python对象 8 | 9 | | json.dumps | 将 Python对象编码成JSON字符串 | 10 | | ---------- | -------------------------------------- | 11 | | json.loads | 将已编码的JSON字符串解码为 Python对象 | 12 | -------------------------------------------------------------------------------- /docs/8-17-http协议提交请求头内容.md: -------------------------------------------------------------------------------- 1 | ## 8-17-http协议提交请求头内容 2 | 3 | Accept-Charset:浏览器能够显示的字符集 4 | 5 | Accept- Encoding:浏览器能够处理的压缩编码 6 | 7 | Accept-Language:浏览器当前设置的语言 8 | 9 | Connection:浏览器与服务器之间连接的类型 10 | 11 | Cookie:当前页面设置的任何 Cookie 12 | 13 | Host:发出请求的页面所在的域 14 | 15 | Referer:发出请求的页面的URL 16 | 17 | User-Agent:浏览器的用户代理字符串 18 | 19 | Content-Type:请求数据的格式或者是类型 20 | -------------------------------------------------------------------------------- /docs/11-26-等待时间有哪三种,区别是什么-.md: -------------------------------------------------------------------------------- 1 | ## 11-26-等待时间有哪三种,区别是什么- 2 | 3 | 1、sleep强制等待,要导入from time import sleep,必须等待那么多秒定位才执行 4 | 5 | 2、driver.implicitly_wait隐式等待多秒内只要找到元素就开始执行,超多设定时间就超时 6 | 7 | 3、Web DriverWaite(driver,20.1).until(lambdax.x.find_element_by_name()).send_keys()-首先需要导入一个包:fom selenium.webdriver.support.wait import WebDriverWait, driver 1s钟找一次元素,最多找20秒,一直发送请求,直到找到元素位置以后,进行下一步操作。 8 | -------------------------------------------------------------------------------- /docs/15-18-你们之前是用什么手机什么版本做兼容性测试的-.md: -------------------------------------------------------------------------------- 1 | ## 15-18-你们之前是用什么手机什么版本做兼容性测试的- 2 | 3 | 有用到三星note5 Android 6.0.1 三星s6 Android 6.0.1 4 | 5 | 红米1s Android 5.1 小米5 Android 7.0 6 | 7 | 华为mate9 Android 6.0 乐视2 Android 6.0 8 | 9 | 华为mate20 Android 9.0 三星s8 Android 8.0 10 | 11 | iphoneos ios 10.3.2 iphone ios 10.0.2 12 | 13 | iphone ios 8.4.1 iPhone X ios 11.0 14 | -------------------------------------------------------------------------------- /docs/17-18--冒泡排序.md: -------------------------------------------------------------------------------- 1 | ## 17-18--冒泡排序 2 | 3 | list=[2,1,6,3,8] 4 | 5 | def bubble_sort(list); 6 | 7 | for i in range(0,len(list)-1): 8 | 9 | for j in range(0,len(lists)-i-1): 10 | 11 | if list[j] > list[j+1]; 12 | 13 | list[j],list[j+1] = list[j+1],list[j] 14 | 15 | return list 16 | 17 | 另外自带函数排序: list.sorto 默认升序排列 18 | 19 | list.sort(reverse=True) 降序排列 20 | -------------------------------------------------------------------------------- /docs/3-4-有没有写过测试计划,具体包括哪些内容-.md: -------------------------------------------------------------------------------- 1 | ## 3-4-有没有写过测试计划,具体包括哪些内容- 2 | 3 | 参考答案1: 4 | 5 | 测试计划内容: 6 | 7 | (1)目的和范围 (2)规程 (3)测试方案和方法 (4)测试的准入和准出 8 | 9 | (5)测试计划(流程、时间安排、对应人员) (6)测试的环境配置和人员安排 (7)交付件 10 | 11 | 参考答案2 12 | 13 | 我们公司之前按照考核要求写过测试计划,不过后面老大觉得太耽误工作进度, 14 | 15 | 后面一般都不再写测试计划,而是写版本计划,这个在版本计划,每个人的任务列出来, 16 | 17 | 负责人列出来,自己根据自己的情况分配时间,然后汇总,大家一起开个小会评审就可以了。 18 | -------------------------------------------------------------------------------- /docs/13-7-fixture装饰器的作用与默认值.md: -------------------------------------------------------------------------------- 1 | ## 13-7-fixture装饰器的作用与默认值 2 | 3 | 1. 装饰器:@pytest.fixture() 4 | 5 | def open_l(): #不再用test开头, 6 | 7 | ea = element_action() #实例化对象 8 | 9 | ea.open_url() #打开浏览器 driver,被其他用例所调用 10 | 11 | Yield ea 1,装饰器使用的返回值,类似于 return方法 2,前置与后置处理分开 12 | 13 | ea.close_browser() #每次运行,关闭浏览器,闭环 14 | 15 | 设置了装饰器之后,可以被其他用例调用,有使每个用例都有打开网页和默认关闭网页的作用 16 | -------------------------------------------------------------------------------- /docs/3-14-bug的级别有哪些,级别如何判断.md: -------------------------------------------------------------------------------- 1 | ## 3-14-bug的级别有哪些,级别如何判断 2 | 3 | 1、致命:对业务有至关重要的影响,业务系统完全丧失业务功能,无法再继续进行, 4 | 5 | 或业务系统丢失了业务数据且无法恢复,影响公司运营的重要业务数据出错。 6 | 7 | 2、严重:对业务有严重的影响,业务系统已经丧失可部分的重要的业务功能,或业务系统 8 | 9 | 丢失了业务数据且可以恢复,一般业务数据出错。 10 | 11 | 3、一般:对业务有较小的影响,业务系统丧失了较少的业务功能, 12 | 13 | 例如:界面错误,打印或显示格式错误。 14 | 15 | 4、提示:对业务没有影响,不影响业务过程正常进行, 16 | 17 | 例如:辅助说明描述不清楚,提示不明确的错误提示。 18 | -------------------------------------------------------------------------------- /docs/20-1-有没有抓过包,为什么要抓包,具体怎么做的-.md: -------------------------------------------------------------------------------- 1 | ## 20-1-有没有抓过包,为什么要抓包,具体怎么做的- 2 | 3 | 抓包这块,其实我们在工作用得是比较多的,一般我们都在测试过程碰到问题,我们有的候通过抓包去看一下前端与后台的数据交互,通过分析这个数据,来定位到底是前端问题,还是后台问题。 4 | 5 | 主要用的就是 fiddler工具,如果只是抓取Web端数据的话,只要在浏览器上设置代理服务器,指定代理服务器为本地的fiddler这个工具,设置好端口:8888 就可以了,如果要抓取手机端的包,首先需要保证手机与电脑(安装了 fiddler的这个电脑)在同一个网络,在手机上要设置http代理服务器为手动,然后服务器指定为电脑的ip地址,端口设置为8888 6 | 7 | 例外,如果要抓取https包,可能还需要在电脑上安装证书,手机端这边也要安装证书,差不多这样就可以。 8 | -------------------------------------------------------------------------------- /docs/14-7-什么是内存泄漏,什么是内存溢出?.md: -------------------------------------------------------------------------------- 1 | ## 14-7-什么是内存泄漏,什么是内存溢出? 2 | 3 | 内存泄漏: 4 | 5 | 是指程序在申请内存后,无法释放已申请的内存空间,导致系统无法及时回收内存并且分配给其他进程使用。通常少次数的内存无法及时回收并不会到程序造成什么影响,但是如果在内存本身就比较少获取多次导致内存无法正常回收时,就会导致内存不够用,最终导致内存溢出。 6 | 7 | 内存溢出:OOM 8 | 9 | 1. 指程序申请内存时,没有足够的内存供申请者使用1M实际要占用2M内存, 10 | 11 | 就说分配的内存不够,导致内存溢出 12 | 13 | 2. 给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据 14 | 3. 长期出现内存泄漏,导致系统内存越用越少,最终导致内存不够用,导致系统崩溃,出现OOM 15 | -------------------------------------------------------------------------------- /docs/9-3-接口测试主要目的是什么-.md: -------------------------------------------------------------------------------- 1 | ## 9-3-接口测试主要目的是什么- 2 | 3 | 例外两种问法:接口测试的价值,意义?为什么要做接口测试? 4 | 5 | 主要就是验证后台服务端的业务逻有没有问题,提高测试的效率 6 | 7 | ①越底层发现bug,它的修复成本是越低的 8 | 9 | ②前端页面修改频繁情况下,接口测试不受页面元素改变而影响 10 | 11 | ③检查系统的安全性,前端传参不可信,比如京东购物,前端价格不可能传入-1元,但是 12 | 13 | 通过接口可以传入-1元 14 | 15 | ④如今的系统复杂度不断上升,传统的测试方法成本急剧增加且测试效率大幅下降,接口自动化测试可以提高测试效率 16 | 17 | ⑤接口测试相对容易实现自动化持续集成,且相对U自动化也比较稳定,可以减少人工,回归测试人力成本与时间,缩短测试周期 18 | -------------------------------------------------------------------------------- /docs/11-18-如何去定位下拉框.md: -------------------------------------------------------------------------------- 1 | ## 11-18-如何去定位下拉框 2 | 3 | 1、首先要导入一个包: from selenium.webdriver.support.select import Select 4 | 5 | 2、先给下拉框元素定位定义一个变量:a= diver.find_element_by_css_selector() 6 | 7 | 3、再通过根据下拉框的 value\visible_text\index去选择值 8 | 9 | Select(a).select_by_value('')--根据下拉框的vaue值去选取值 10 | 11 | Select(a).select_by_visible_text('')--根据下拉框的内容去选值 12 | 13 | Select(a).select_by_index('')--根据下拉框的下标去选。从0开始 14 | -------------------------------------------------------------------------------- /docs/11-20-如何在不同的网页之间切换.md: -------------------------------------------------------------------------------- 1 | ## 11-20-如何在不同的网页之间切换 2 | 3 | 1.首先要获取多个界面的句柄 4 | 5 | 先通过定位元素几个界面: driver.find_element_by_id().click或者其他,获取一个界面打印一个:print (diver.window_handles) 6 | 7 | 然后获取几个界面的句柄,定义成一个变量:window_list= diver.window_handles()---以列表形式存在 8 | 9 | 2.通过界面句柄的下标进入不同的界面: driver.switch_to_window(window_list[O]) 10 | 11 | 通过界面句柄的下标进入不同的界面,0表示第一个,下标-1代表最新的界面 12 | 13 | 注意:如果进入一个界面里面是内嵌,记得退出内嵌再进入另一个界面 14 | -------------------------------------------------------------------------------- /docs/7-6-索引有哪些,如何建立索引,素引的优缺点.md: -------------------------------------------------------------------------------- 1 | ## 7-6-索引有哪些,如何建立索引,素引的优缺点 2 | 3 | MySQL索引的建立对手 MySQL的高效行是很重要的,索引可以大大提高MySQL的检素速度 4 | 5 | 缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行 INSERT、 6 | 7 | UPDATE和 DELETE,因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件,建立索引会占用磁盘空间的索引文件。 8 | 9 | 索引份分单列索引和组合索引,单列索引,即一个索引只包含单个列,一个表可以有多个单列素引,但这不是组合素引,组合索引,即一个索引包含多个列。 10 | 11 | 主键索引 PRIMARY KEY,唯一索引 UNIQUE,普通素引 INDEX 12 | 13 | 组合索引INDEX,全文索引 FULLTEXT 14 | -------------------------------------------------------------------------------- /docs/3-18-产品是怎么上线的-.md: -------------------------------------------------------------------------------- 1 | ## 3-18-产品是怎么上线的- 2 | 3 | 一般我们会选择晚上上线,开发测试还有产品全部到场,进行上线测试。 4 | 5 | 首先,开发将代码打包到生产环境的服务器中,如果数据表有变化,就会运行sql文件, 6 | 7 | 对表的一些操作,接着,我们测试就开始先测试主体业务功能以及新增的功能模块; 8 | 9 | 测试通过之后,我们会在界面上把上线测试的数据删除,正常上线。 10 | 11 | 如果发现bug,开发人员当场修复bug,修复成功之后我们测试再复测,通过就可以正常上线 12 | 13 | 如果发现了bug开发人员在上线规定时间之前都还没有修复好的话,就看问题的严重性, 14 | 15 | 如果严重就延期上线,如果我们是迭代版本的话我们还需要版本回滚。 16 | 17 | 如果不严重,产品跟客户觉得可以上线,就正常上线。 18 | -------------------------------------------------------------------------------- /docs/5-13-电商的库存逻辑怎么测。.md: -------------------------------------------------------------------------------- 1 | ## 5-13-电商的库存逻辑怎么测。 2 | 3 | 比如客户下订单,库存减少,规定时间内未支付定单就取消,库存又加回来, 4 | 5 | 我会先测一下界面,比如界面的排版是否美观,有没有错别字,颜色适不适合等。然后再测试一下功能,提交订单页面,我会测试购买商品数量,自己输入的边界值和点击加就加或者减少修改数量,不选择数量会不会有默认数量,不选择商品类型以及选择多个商品类型,然后测试正确提交订单后,看库存是否有减少相应的数量。再测试规定时间的边界值,比如规定时间是1个小时,那1个小时内完成支付,库存有没有变化,61分钟还是否能去支付,订单有没有关闭,接着会测试一下1个小时内取消订单,单库存有没有增加相应的数量以及1小时内没有去支付,系统自动取消订单,库存有没有加上相应的数量。再测安全性,涉及到支付,用fiddler工具抓包拦截数据,看能否修改参数,再发送请求支付成功,测逻辑的话大概就这些。 6 | -------------------------------------------------------------------------------- /docs/11-19-如何去定位内嵌界面.md: -------------------------------------------------------------------------------- 1 | ## 11-19-如何去定位内嵌界面 2 | 3 | 1、定位元素的时候看到fame的需要进入内嵌 4 | 5 | 2、如果有内嵌有id或name值时直接进入内嵌 driver.switch_to.frame(id值或name值) 6 | 7 | 3、如果内嵌没有id或name值,先定义一个内嵌再进入: 8 | 9 | a=driver.find_element_by_class_name(‘’) 10 | 11 | driver.switch_to.frame(a) 12 | 13 | 4、如果有多层内嵌,要一层一层进入 14 | 15 | 5、记得退出内嵌: driver.switch_to_default_content() 16 | 17 | 6、driver.switch_to.parent_frame()---进入父级内嵌,调至上一级内嵌 18 | -------------------------------------------------------------------------------- /docs/11-51-你们有没有做过自动化工程维护工作。.md: -------------------------------------------------------------------------------- 1 | ## 11-51-你们有没有做过自动化工程维护工作。 2 | 3 | (对于自动化工程的维护是你做的吗? 你们的工程具体怎么维护的? 如何实现数据与脚本的分离? 4 | 5 | 具体怎么做的? 优点在哪里? ) 6 | 7 | 工程维护这块,最主要分为几大块模块,主要就是工程管理思想,我们当时采用的POM模型来实现工程的模块化,把数据,配置文件,报告,测试用例,页面操作,公共业务方法等都进行独立起来, 8 | 9 | 封装到不通过的模块中, 10 | 11 | 例外就是实现数据驱动,参数化, 12 | 13 | 还有就是实现一些函数的封装,方便调用, 14 | 15 | 还有一个重点就是用例的管理,统一加载执行,如何实现全量跑用例,出报告等等 16 | 17 | 这块我做得不是特别多,大部分都是我们老大维护的,我们主要是协助为主。 18 | -------------------------------------------------------------------------------- /docs/3-40-你们的开发语言是什么?.md: -------------------------------------------------------------------------------- 1 | ## 3-40-你们的开发语言是什么? 2 | 3 | java后台开发: 4 | 5 | SSM spring + springy + mybaits(数据的封装) 6 | 7 | SSH sprint + springmvc + hibernate 8 | 9 | springboot 10 | 11 | fianl极速开发框架 12 | 13 | maven项目 pom.xml文件 ...中央仓库 14 | 15 | python后台开发框架 16 | 17 | Django flask 18 | 19 | 前端开发语言: 20 | 21 | JavaScript + css+ html bootstrap框架 常用库: jquery简称JQ Es6/E57 22 | 23 | php ThinkPHP框架 24 | -------------------------------------------------------------------------------- /docs/6-6-测试环境是如何搭建的(弱项).md: -------------------------------------------------------------------------------- 1 | ## 6-6-测试环境是如何搭建的(弱项) 2 | 3 | 前提条件:租服务器或者买服务器-仅搭建一次, 4 | 5 | 1、搭建环境 linux+ apache+php+ mysql, linux+ tomcat+java+ mysql 6 | 7 | 2、每一次选代,每一次测试( apache)html目录下 8 | 9 | 1)替换代码包(覆盖代码包)-配置文件已经编辑好-压缩包 10 | 11 | 2)运行sql文件 12 | 13 | 3)重启服务 14 | 15 | tomcat(java语言) ---代码在 webapps目录下 16 | 17 | 1,替换代码包(覆盖代码包)·配置文件已经编辑好-压缩包,war包(重启 tomcat服务,自动化解压) 18 | 19 | 2,运行SQL文件 20 | 21 | 3,重启服务 22 | -------------------------------------------------------------------------------- /docs/11-7-自动化测试的优点与缺点.md: -------------------------------------------------------------------------------- 1 | ## 11-7-自动化测试的优点与缺点 2 | 3 | 优点: 4 | 5 | 1、对程序的回归测试更方便 6 | 7 | 2、可以运行更多更繁琐的测试 8 | 9 | 3、提高测试效率和准确性,节约时间成本 10 | 11 | 4、可以执行一些手工测试困难或不可能进行的测试(例如,对于大量用户的测试,可以通过自动化测试模拟同时有许多用户,从而达到测试的目的) 12 | 13 | 5、自动化测试不存在执行过程中的疏忽和错误,从而增加软件信任度 14 | 15 | 缺点: 16 | 17 | 1、不能取代手工测试 18 | 19 | 2、手工测试比自动测试发现的缺陷更多 20 | 21 | 3、对测试质量的依赖性极大 22 | 23 | 4、由于自动测试比手动测试更胞弱,所以维护会受到制,从而会制约软件的开发 24 | 25 | 5、工具本身无想像力 26 | -------------------------------------------------------------------------------- /docs/13-6-运行完成后,如何去自动发送邮件.md: -------------------------------------------------------------------------------- 1 | ## 13-6-运行完成后,如何去自动发送邮件 2 | 3 | \#用例执行,无人值守的状态,如何才能知道已经运行完成,发送测试报告到邮箱里面查看运行完成 4 | 5 | 安装 yagman 6 | 7 | pip installyagmail、在 pycharm中安装 yagmail 8 | 9 | 导入 yagmail: import yagmail 10 | 11 | 定义发送者邮箱服务,里面包括邮箱地址,授权码,smtp.126.com 12 | 13 | yag = yagmail.SMTP("126邮箱地址","授权码","smtp.126.com") 14 | 15 | 自动发送邮件 16 | 17 | yag.send(["接收邮件的邮箱地址","多个邮箱用列表包起来"],"邮件主题","邮件正文内容","附件的地址../report/report.html") 18 | -------------------------------------------------------------------------------- /docs/2-15-计算机专业课程有哪些-.md: -------------------------------------------------------------------------------- 1 | ## 2-15-计算机专业课程有哪些- 2 | 3 | 公共课程:数学(高等数学、线性代数、概率论与数理统计、离散数学、数值分析), 4 | 5 | 政治(马克思主义思想概论、毛泽东思想概论与中国特色社会主义思想、 6 | 7 | 思想道德修养与法律基础、中国近现代史纲要)、大学英语、体育。 8 | 9 | 专业基础课程:电路原理、模拟电子技术、数字逻辑、微机原理、汇编语言、操作系统原理、 10 | 11 | 编译原理、算法与数据结构、面向对象方法、C语言/C++语言等。 12 | 13 | 专业方向课程:计算机数据库原理、python语言、图形学、人工智能,多媒体技术、 14 | 15 | 网络安全、人机交互、无线互联网技术、软件开发方法、高性能技术系统仿真和虚拟现实等。 16 | 17 | 大专3年、本科4年, 18 | 19 | 本科四级、大学英语四级及格425分、总分710 20 | -------------------------------------------------------------------------------- /docs/20-4-给你一个需求,你具体讲下,你怎么测试-.md: -------------------------------------------------------------------------------- 1 | ## 20-4-给你一个需求,你具体讲下,你怎么测试- 2 | 3 | 第一点:首先我要熟恶这个需求的背景,这个需要功能,我至少要知道这个需求做的是什么吧,做的 是一个什么样的解决方法这个要搞清楚。 4 | 5 | 第二点:这些搞清楚,看这个需要和其他模块有哪些交互,需不需要关联起来分析,有没有影响到其 他模块,或者数据有没有流向其他模块。 6 | 7 | 第三点:这些都清楚了,那么我会根据熟悉的情况看下工作量,哪个时间点交付,在这个时间点我需 要做一个计划给老大说下,如果时间充分,一个人能搞定,那么就一个人搞定,搞不定,我 会向老大申请人力。其实接下来也差不多了,分析需求,尽量要评审,在前期就保证好质量, 如果没有问题。其他也就是用例实例化,执行啊,bug跟踪啊等,最后出个报告就好了。 8 | 9 | 基本我做的活,会这么做主要看你在最短时间把需求吃透,做好计划,展开工作。 10 | -------------------------------------------------------------------------------- /docs/9-15--cookie、session、token的区别.md: -------------------------------------------------------------------------------- 1 | ## 9-15--cookie、session、token的区别 2 | 3 | 它们都是用来做鉴权的,区别的话,大概是这样的 4 | 5 | 1、现在 cookie、session一般是配合使用的用户第一次登陆时,服务器会创建一个 session 6 | 7 | 生成一个 sessionID,sessionID保存在 cookie中,然后返回到客户端,保存在浏览器中。 8 | 9 | 客户端每次发请求都会把这个值带到服务器,做一个鉴权和会话的跟踪,或者时效的验证 10 | 11 | 2、token和 cookie、session差不多,通过算法,每次验陆,会产生一串很长的随机字符串,一般是在放在返回的body里面,或者返回的头里面,他们都是服务器产生,带过来是要做验证和时效的验证的。一般在app中使用token比较多一点,Web端使用cookie、session的鉴权方式会多一点。 12 | -------------------------------------------------------------------------------- /docs/14-22-响应超时,你是怎么定位的.md: -------------------------------------------------------------------------------- 1 | ## 14-22-响应超时,你是怎么定位的 2 | 3 | 这里一般我会采用排查发,首先考虑软件优化问题,之后考虑硬件问题,思路大概是这样的 4 | 5 | 1、首先考虑中间件(tomcat,Apache的连接数的问题),可以尝试增加连接数,看是否变化。 6 | 7 | 2、例外还有就是数据库的连接数问可题,也可以尝试增加,看是否有变化。 8 | 9 | 3、要不就是看数据库的访问效率问题,这里要考虑数据库的操作是否添加索引,如果没有添加索引,可以让开发优化下数据库的访问速度,添加索引,或者优化sql语句。 10 | 11 | 4、再一个就可以尝试考虑后台代码的架构设计是否合理,代码算法是否足够优化。 12 | 13 | 5、如果以上问题都不能解决,那么只能考虑增加服务器的CPU内存,或者增加网络带宽,看响应时间是否可以得到优化。 14 | 15 | 大概的思路差不多就是这样的吧。 16 | 17 | 18 | -------------------------------------------------------------------------------- /docs/11-36-自动化中如何去操作excel表格-.md: -------------------------------------------------------------------------------- 1 | ## 11-36-自动化中如何去操作excel表格- 2 | 3 | 需要用到xlrd库,调用这个库中的API函数来实现的。 4 | 5 | 1.第一步:导包 import xlrd 6 | 7 | 2.第二步:book= xrd.open_workbook(文件路径) 8 | 9 | 3.第三步:table= book.sheet_by_name表名) 10 | 11 | 4.第四步:读某行数据一般都技行来读取 12 | 13 | Table.row_values(x) 14 | 15 | 如果要读全部的数据,多行数据,利用循环读取就可以 16 | 17 | List=[] 18 | 19 | for i in range(1,table.nrows): 20 | 21 | List.append(table.row_values(i)) 22 | 23 | return list 24 | -------------------------------------------------------------------------------- /docs/15-9-对于内存具体怎么测呢-.md: -------------------------------------------------------------------------------- 1 | ## 15-9-对于内存具体怎么测呢- 2 | 3 | 对于内存其实主要看有没有内存泄漏的问题 4 | 5 | 具体我们是这样做的: 6 | 7 | 1、首先我会频繁操作同一个业务,看他的内存和cpu是否逐步增长,最后稳定在一个固定大小的范围,如果在频繁操作同一个业务,内存一直在增长,可能存在有内存泄漏问题,尝试手动GC(手动回收内存,因为内存泄漏,系统已经回收不了,所以尝试下手动回收内存),内存明显或者断崖式的下降,基本就可以判断有内存泄漏的现象 8 | 9 | 再通过 damp java这个去分析,分析结果如果出现 leaked,就说明有了,里面可以找到是哪个对象,截图提bug, 10 | 11 | 2、使用app过程中,内存一直在增长,那基本可以判断有内存泄漏的情况,还有看是否有内存抖动的现象:这里主要原因还是有因为大量小的对象频繁创建,频繁的回收内存,会导数cpu频繁使用,造成cpu使用过大,造成app卡顿,导致内存碎片,内存泄漏等问题 12 | -------------------------------------------------------------------------------- /docs/10-16-你们做接口自动化,用例数据是怎么组织,管理的-.md: -------------------------------------------------------------------------------- 1 | ## 10-16-你们做接口自动化,用例数据是怎么组织,管理的- 2 | 3 | 用例数据这块,当时公司要求使用 excel表格来进行管理,其实这里主要也是为了实现数据与脚本的分离,提高整个工程后期的维护与优化,这里把数据封装到excel表格之后。 4 | 5 | 我们在脚本中通过调用封装好的读取 excel表格的数据函数,对excel表格中的用例数据, 6 | 7 | 我们是这么组织的,会有以下几个字段像用例标题,请求地址,请求方式,请求头,请求参数,响应结果,这个几个部分,对于请求头跟请求参数,因为脚本中发请求都是通过组装成字典的形式来发送的所以这里我们也是通过类似于字典的形式文本格式来进行组织,主要就是方便后期脚本的提取与引用其实我觉得,这样去处理的好处就是,后期如果用例数据有变动,或者需要增加或删除部分 8 | 9 | 用例直接针对 excel表格数据进行操作就可以了,不需要改动脚本这也就方便整个项目工程的管理与维护了。 10 | -------------------------------------------------------------------------------- /docs/20-2-为什么要进行抓包-具体怎么分析的-.md: -------------------------------------------------------------------------------- 1 | ## 20-2-为什么要进行抓包-具体怎么分析的- 2 | 3 | 主要是我们在测试过程中,出现Bug的时候,为了定位问题,分析问题,需要抓取前端后台的数据交互过程,通过看数据,从而来分析到底是前端问题还是后台问题 4 | 5 | 分析这块的话: 6 | 7 | 1、首先看发的请求是否有问题,请求的接口url是否有错误,参数是否有错误,如果url或传参有问题那就是前端Bug 8 | 9 | 2、如果请求没有问题,看下后台返回的数据是否有问题,状态码5开头的基本都是后台问题,状态码为200,响应数据与预期不一致,那也是后台Bug,不过这里有可能是数据库问题,也有可以是后台代码问题,这里首先我一般会查看下数据库的数据,如果数据库没有问题,那就需要查看下后台的日志文件,具体分析下看是后台代码哪里出问题了,然后把日志信息信息截图给开发, 10 | 11 | 3、返回的数据没有问题,请求参数,u也没有问题,那可能是前端代码是否转换有问题,那就是前端Bug 12 | -------------------------------------------------------------------------------- /docs/17-13-列出-python中可变数据类型和不可变数据类型,并简述原理-.md: -------------------------------------------------------------------------------- 1 | ## 17-13-列出-python中可变数据类型和不可变数据类型,并简述原理- 2 | 3 | 1) 可变数据类型:列表list和字典dict; 4 | 2) 不可变数据类型:整型int、浮点型float、字符串型 string和元组 tuple 5 | 6 | "python中的不可变数据类型,不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象, 7 | 8 | 在内存中则只有一个对象,内部会有一个引用计数来记录有多少个变量引用这个对象;可变数据类型,允许变量的值发生变化,即如果对变量进行 append、+=等这种操作后, 9 | 10 | 只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址, 11 | 12 | 相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。 13 | -------------------------------------------------------------------------------- /docs/17-8-如何遍历列表,字典-.md: -------------------------------------------------------------------------------- 1 | ## 17-8-如何遍历列表,字典- 2 | 3 | 1) 列表遍历 4 | 5 | list=[3,4,6,89] 6 | 7 | for i in range(0,len(list)): 8 | 9 | print(‘%d’%list[i]) 10 | 11 | for i in list 12 | 13 | print(i) 14 | 15 | 2) 字典遍历 16 | 17 | dict ={‘name’:’jason’,’pwd’:’123456’} 18 | 19 | for key in dict.keys(): 20 | 21 | print(dict[key]) 22 | 23 | for value in dict.values(): 24 | 25 | print(value) 26 | 27 | for key,value in dict.items(): 28 | 29 | print(key,value) 30 | -------------------------------------------------------------------------------- /docs/11-43-断言有哪几种(三种),常见-assert断言.md: -------------------------------------------------------------------------------- 1 | ## 11-43-断言有哪几种(三种),常见-assert断言 2 | 3 | selenium提供了三种模式的断言: assert、verify、 waitfor 4 | 5 | Assert失败时,该测试将终止。 6 | 7 | Verify失败时,该测试将继续执行,并将错误记入日显示屏。也就是说允许此单个验证通过。确保应用程序在正确的页面上。 8 | 9 | Waitfor用于等待某些条件变为真。可用于AJAX应用程序的测试 10 | 11 | 常见的 assert断言: 12 | 13 | assertTitle(检查当前页面的title是否正确) 14 | 15 | assertText(检查指定元素的文本) 16 | 17 | assert Attribute(检查当前指定元素的属性的值) 18 | 19 | 如果该条件为真,他们将立即成功执行。如果该条件不为真,则将失败并暂停测试。直到超过当前所设定的超过时间。一般跟 setTimeout时间一起使用 20 | -------------------------------------------------------------------------------- /docs/14-8-吞吐量,吞吐率.md: -------------------------------------------------------------------------------- 1 | ## 14-8-吞吐量,吞吐率 2 | 3 | **吞吐量:KB** 4 | 5 | 指在一次性能测试过程中网络上传输的数据量的总和(单位应该KB)也可以这样说, 6 | 7 | 在单次业务中,客户端与服务器端进行的数据交互总量;对交互式应用来说,吞吐量指标反映服务器承受的压力。 8 | 9 | 并不是吞吐量越高越高,一个服务器的性能,要从多个方面去考虑: 10 | 11 | 90%用户的平均响应时间、错误率、吞吐量/吞吐量、CPU、内存、磁盘I/O、网络的占用情况, 12 | 13 | 还有服务器的配置。 14 | 15 | **吞吐率:** 16 | 17 | 吞吐量/传输时间,即单位时间内网络上传输的数据量,也可以指单位时间内处理客户请求数量,它是衡量网络性能的重要指标。 18 | 19 | 12s 800M数 20 | 21 | 800 * 1024 / 12 = 66666 KB/sec 22 | 23 | 通常情况下,吞吐率用“字节数秒”来衡量,当然,也可以用“请求数/秒”来衡量; 24 | -------------------------------------------------------------------------------- /docs/8-3-如何抓取手机的包.md: -------------------------------------------------------------------------------- 1 | ## 8-3-如何抓取手机的包 2 | 3 | 1、开启 Fiddler的远程连接 4 | 5 | Fiddler主菜单Toos- Options-> Connections>勾选 Allow remote computers to 6 | 7 | 2、重启 Fiddler,更新刚开启的远程配置 8 | 9 | 3、然后手机和电脑需要在同一个局域网,抓取http手机设置代理就可以,要抓取https包,手机需要安装一个fiddler证书 10 | 11 | 1、fder工具生成一个证书,发送手机上面安装 12 | 13 | 2、通过手机浏览器打开安装证书界面192.168.3.197:8888 14 | 15 | ip地址是用 fiddler工具的电脑的ip地址,fiddler工具端口号的8888 16 | 17 | 3、点击下载证书,会提示,输入手机锁屏密码 18 | 19 | 4、给证书命名,名字随意,其他默认就ok 20 | 21 | 5、点击确定,安装成功,然后就可以抓取https的包了 22 | -------------------------------------------------------------------------------- /docs/10-18--你们-python接口自动化怎么去处理-cookie,-session的-.md: -------------------------------------------------------------------------------- 1 | ## 10-18--你们-python接口自动化怎么去处理-cookie,-session的- 2 | 3 | 对于 cookie,session的处理一般有三种方式: 4 | 5 | 第一种就是先获取登录请求的 cookie值,然后发送其他请求的时候,在 requests提供的 6 | 7 | 两个方法get或post方法中有一个 cookies参数,我们可以通过这个参数来传递 cookies值 8 | 9 | 第二种就是通过订制请求头,然后把获取到的coookies放在请求头中,通过请求头来进行传递 10 | 11 | 第三种就是通过创建一个 session会话对象,后期所有的请求发送都通过调用这个 session会话对象来进行发请求,如果是登录请求,它会自动保存 cookies值,然后其他需要用到cookies值的请求,也通过 session对象来发送,它会自动把 cookies发送出去,对于 cookies, session的处理,我们差不多都是通过以上三种方式来实现的 12 | -------------------------------------------------------------------------------- /docs/11-10--seleniun的原理是什么-.md: -------------------------------------------------------------------------------- 1 | ## 11-10--seleniun的原理是什么- 2 | 3 | 我们用的 selenium3x以上的版本,对于 selenium2x以上的版本原理是这样的: 4 | 5 | Selenium2.0则是把 selenium1.0中 selenium RC替换为了 WebDriver 6 | 7 | WebDriver利用浏览器原生的API,封装成一套更加面向对象的 SeleniumWeb Driver API 8 | 9 | 直接操作浏览器页面里的元素,甚至操作浏器本身(截屏,回口大小,启动,关闭,安装插件,配置证书之类的),由于使用的是浏览器原生的API速度大大提高,而且调用的稳定性交给了浏览器厂商本身,显然是更加科学,然而带来的一些副作用就是,不同的浏器厂商,对Web元素的操作和呈现多少会有一些差异,这就直接导致了 SeleniumWebDriver要分浏览器厂商不同,而提供不同的实现,例如 Firefox就有专门的 FirefoxDriver, 10 | 11 | Chrome就有专门的 ChromeDriver等等 12 | -------------------------------------------------------------------------------- /docs/15-12-对于FPS具体怎么测-.md: -------------------------------------------------------------------------------- 1 | ## 15-12-对于FPS具体怎么测- 2 | 3 | 对于Fps帧率的问题,我们当时用的adb命令来测的 4 | 5 | 知识点拓展: Android设备的屏幕刷新率为60帧/s,要保持画面流畅不卡顿,要求每一帧的时间不超过1000/60=16.6ms,这就是16ms的黄金准则, 6 | 7 | a. 打开手机:开发者选项-> profile GPU rendering -> 8 | 9 | in adb shell dumpsys gfxinfo(开启GPU渲染模式) 10 | 11 | b. 操作要测试的apk 12 | 13 | C. cmd窗口输入命令: adb shell dumpsys gfxinfo 包名 14 | 15 | d. 得到一个矩阵数据,计算矩阵中帧率大于16的点所占比例,即为卡顿比 16 | 17 | e. 通过execl进行表格处理可以直观的查看软件的流畅度 18 | 19 | 15.14对于电量具体怎么测? 20 | 21 | 电量这一块,我们当时用的手机自带的第三方软件测的 22 | -------------------------------------------------------------------------------- /docs/7-1-你们数据库怎么用.md: -------------------------------------------------------------------------------- 1 | ## 7-1-你们数据库怎么用 2 | 3 | [原来我们数据库用的比较多的,就是数据结果检查,测试一些数据准备,性能测试造大量数据。] 4 | 5 | [测试执行到的结果,我们需要通过sql语句 select来查找数据库对应的表,看看数据库信息跟我们执行的结果是否一致,比如:生成申请借款后,我们会去数据库里面去检查下,数据库中数据是否跟申请订单数据一致。] 6 | 7 | [我们在测试执行时需要做一些测试数据准备,我们就用 insert into输入数据或(者update set修改数据),我们需要到数据库查看有没有相关记录保存,保存的数据跟我们输入或者修改的记录是否一致;比如:原来我们一个初审功能里面有个分页功能,测试分页功能,需要100条数据,我们就通过数据库操作添加100,可以用 insert into。也可以用脚本实现,或者存储过程] 8 | 9 | [还有在做性能测试时,模拟用户场景时需要用到大量的数据,这时就需要我们到数据库中制造大量的数据出来。比如说,测试充值,需要大量用户数据,充值表中大量数据,比如10W条数据,我们就用存储过程去造。] 10 | -------------------------------------------------------------------------------- /docs/8-9--cookie跟-session的区别.md: -------------------------------------------------------------------------------- 1 | ## 8-9--cookie跟-session的区别 2 | 3 | 在网站中http请求是无状态的,也就是说即使第一次和服务器连接后并且登录成功后, 4 | 5 | 第二次请求服务器依然不能知道当前请求是哪个用户,cookie的出现就是为了解决这个问题, 6 | 7 | 第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的 cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB,因此使用 cookie只能存储一些小量的数据。 8 | 9 | session和 cookie的作用有点类似,都是为了存储用户相关的信息,不同的是,cookie是存储在本地浏览器,而session存储在服务器.存储在服务器的数据会更加的安全,不容易被窃取。但存储在服务器也有一定的弊端,就是会占用服务器的资源,但现在服务器已经发展至今,一些session信息还是绰绰有余的 10 | -------------------------------------------------------------------------------- /docs/2-1-简单的自我介绍下.md: -------------------------------------------------------------------------------- 1 | ## 2-1-简单的自我介绍下 2 | 3 | 面试宫,您好,我叫XXX,来自于XXXX,目前从事软件测试工作,已经三年工作经验,个人性格,比较开朗,跟人关系比较好,做事也比较细心三年测试工作经验中,过了不少项目,积累不少项目经验,前面1-2年主要是功能测试,后面这一年主要做接口测试,app自动化测试能够独立完成软件产品测试工作,能够独立编写测试文档,包括用例,计划,报告等,熟悉lnux跟数据库,熟悉 jmeter与 python + request进行接口测试,也可以使用 pytest框架进行接口自动化测试, python + selenium + pytest框架进行自动化测试,python + appnium + pytest移动app自动化测试框架,熟悉使用Jenkins持续集成,熟悉app专项测试与小程序测试,熟悉抓包工具。 4 | 5 | 我个人平常喜欢…看书… 6 | 7 | 我个人觉得测试这一块,主要是对需求了解,需求理解到位,工作当中,一定细心耐心,技术这块,不断学习能力 8 | 9 | 如果面试没有说话, 这个是我的一个简单自我介绍,看面试官还有什么需要了解的 10 | -------------------------------------------------------------------------------- /docs/4-6-项目的送代周期--多久一选代--一个版本你们发现多少bug.md: -------------------------------------------------------------------------------- 1 | ## 4-6-项目的送代周期--多久一选代--一个版本你们发现多少bug 2 | 3 | [切记工具自己所选择的项目来回答] 4 | 5 | 我们公司是这样的,迭代还是蛮快的,一般是两个星期一个迭代,迭代测试两轮。Bug的话不一定哦,关键还得看开发,哈哈,开发的版本质量好的话,BUG就会少些,整个版本比较好的情况下大概也就二十来个BUG,当然如果遇到开发是个新手,那么找到60-70个也是很常见的,比如之前的那个金融项目,足足发现了72个BUG,这样的情况下追踪BUG的工作量都比较的大,如果是版本选代的话,那么基本就不会出现多少BUG了。 6 | 7 | **参考答案2** 8 | 9 | 因为我们项目的用户活动和三方合作平台比较多,一般半个月或者1个月肯定会有一个迭代版本, 10 | 11 | 假如用户或者合作方突然有很紧急的需求,那一般老大他们会向上发邮件和OA呈批给(产品经理,项目经理),如果通过了就会马上加急处理这个需求,测试完成直接上线。 12 | 13 | 现在都是维护为主,但新需求也不断有,一般一个版本上百个bug是有的。 14 | -------------------------------------------------------------------------------- /docs/17-11-python实现列表去重的方法-.md: -------------------------------------------------------------------------------- 1 | ## 17-11-python实现列表去重的方法- 2 | 3 | 第一种方式: 4 | 5 | \#encoding = utf-8 6 | 7 | import time 8 | 9 | time_start=time.time() 10 | 11 | print u"列表去重的七种方法" 12 | 13 | prnt u"第一种测试方法" 14 | 15 | repeat_list=[1,2,4,1,5,1,2,5] 16 | 17 | result=[] 18 | 19 | for i in repeat_list: 20 | 21 | if i not in result; 22 | 23 | result.append(i) 24 | 25 | print u"第一种去重结果:", result 26 | 27 | 第二种方法: 28 | 29 | repeat_list=[1,2,4,1,5,1,2,5] 30 | 31 | print u"第三种去重结果:",list(set( repeat_list)) 32 | -------------------------------------------------------------------------------- /docs/9-36-requests如何做post请求接口.md: -------------------------------------------------------------------------------- 1 | ## 9-36-requests如何做post请求接口 2 | 3 | 定义URL,定义data数据,参数用字典格式保存 4 | 5 | \#表单格式数据请求 6 | 7 | import requests 8 | 9 | \#方维的注册接口 10 | 11 | url = "http://47.95.118.117/fanwe/indexphp?ctl=user&act=doregister" 12 | 13 | data={‘user name’:’cxy0o3’, 14 | 15 | ‘mobile’:’18312345676’, 16 | 17 | ‘user_pwd’:’cxy1234561’, 18 | 19 | ‘user_pwd confirm’:'cxy123456', 20 | 21 | ‘agreement’:’1’, 22 | 23 | ‘commit’:’注册’} 24 | 25 | r=requests.post(url=url,data= data) 26 | 27 | print(r.text) 28 | -------------------------------------------------------------------------------- /docs/9-37--requests上传文件接口如何测试.md: -------------------------------------------------------------------------------- 1 | ## 9-37--requests上传文件接口如何测试 2 | 3 | url="http://106.12.126.197/fanwe/file.php" 4 | 5 | data={ 6 | 7 | "upload_type":"0", 8 | 9 | "localUrl":"E: \\fanwe.png", 10 | 11 | "m":"File", 12 | 13 | "a":"do_upload} 14 | 15 | \#文件上传功能,files参数编写 16 | 17 | files={"imgFile":(‘fanwe.png’, open(‘E:\\fanwe.png’,’rb’),image/png)} 18 | 19 | \#fes={‘文件参数的名称’:(文件名 open(E:\\fanwe.png:读的属性)文件的类型} 20 | 21 | r=erequests.post(url=url,data=data,cookies=login(),files=files) 22 | 23 | print (r.text,type(r.text)) 24 | -------------------------------------------------------------------------------- /docs/11-48-POM模型如何划分模块.md: -------------------------------------------------------------------------------- 1 | ## 11-48-POM模型如何划分模块 2 | 3 | 1、将界面元素封装到一个模块 page_element,封装成—个py文件:page_element.py 4 | 5 | 2、将元素的操作封装到一个模块 element_action,封装成一个py文件:element_action.py 6 | 7 | 3、将测试数据封装到一个模块data,封装成一个py文件 data_base.py 8 | 9 | 4、将一些公共的方法例如数据库操作,获取exell表数据的操作方法封装到一个模块common,封装成一个py文件:common_action.py 10 | 11 | 5、将测试用例(test开头的函数用例)封装到一个模块 test_case,封装成一个py文件test_case.py 12 | 13 | 6、将运行用例的框架( pytest框架)封装到一个模块 run_case,封装成一个py文件:run_case.py(这里还可以发送邮件) 14 | 15 | 7、还建一个存放测试报告文件的模块 report,到时生成的报告存放在这个位置中 16 | 17 | 8、建立一个持续集成需要扩展的模块ci_cd 18 | -------------------------------------------------------------------------------- /docs/10-12-jmeter如间在cmd命令下运行.md: -------------------------------------------------------------------------------- 1 | ## 10-12-jmeter如间在cmd命令下运行 2 | 3 | Jmeter -n -t文件路径\fw-zhuce.jmx -l result.jtl -e -o E:\resultreport 4 | 5 | 讲解:非GUI界面,压测参数讲解 6 | 7 | -h帮助 8 | 9 | -n非GUl模式 10 | 11 | -t指定要运行的 JMeter测试脚本文件 12 | 13 | -l记录结果的文件每次运行之前,(要确保之前没有运行过即xxx.jtl不存在,不然报错) 14 | 15 | -r Jmter.properties文件中指定的所有远程服务器 16 | 17 | -e脚本运行结束后生成html报告 18 | 19 | -o用于存放html报告的目录(目录要为空,不然报错) 20 | 21 | -R表示选择执行=远程启动 22 | 23 | XXX.XXX. XXX. XXX:5174 ,XXX. XXX. XXX. XXX:5172 24 | 25 | 官方配置文件地址http://jmeter.apache.org/usermanual/get-started.html 26 | -------------------------------------------------------------------------------- /docs/14-2-性能测试流程是怎么样的-.md: -------------------------------------------------------------------------------- 1 | ## 14-2-性能测试流程是怎么样的- 2 | 3 | 例外一种问法:简单介绍下你们公司的性能测试流程是怎么样的? 4 | 5 | 我们那个项目的性能做得不多,公司要求也不严格。 6 | 7 | 对于流程这块,首先就要对整个系统进行详细的分析,确定基本的测试范围,看下系统的哪些业务是需要做性能测试的,还有就是做那方面的性能测试,对于我们那个项目,当时就做了几个业务做了些简单的井发压测(稳定性)这块,像登录的,搜索查询,下单,还有就是购物车里面的几个接口都有做过,然后就是对各个业务场景进行详细的场景分析与设计,确定每个业务场景的并发数,是否需要设置集合点啊,压测时间是多长,还有各个业务场景的性能指标等等,场景设计这块基本上都是老大跟产品哪个一起弄的,我参与的不是太多。 8 | 9 | 上面把个场景设置好了之后,提交给我们,我们就是根据老大设置好的那些场景编写了基本的性能测试用例,其实做性能测试,我觉得前期最关键的还是业务场景一定要设计好,后期我们主要的任务就是准备各自任务需要用到的一些测试数据,搭建好测试环境,还有就是测试脚本设计与开发,执行,并生出测试报告,对于测试结果我们一般会简单的做个分析,如果没有什么问题,基本后期就写一个性能测试报告。流程大概就是这样的。 10 | -------------------------------------------------------------------------------- /docs/5-3-图像上传功能的测试点.md: -------------------------------------------------------------------------------- 1 | ## 5-3-图像上传功能的测试点 2 | 3 | 1.检查图片上传路径 4 | 5 | 2.检查图像上传和修改功能 6 | 7 | 3.检查各种扩展图像文件的上传(例如JPEG、PNG、BMP等) 8 | 9 | 4.检查文件名中含有空格或其他可用特殊字符的图片的上传 10 | 11 | 5.检查重复名称图片上传 12 | 13 | 6.图片尺寸大于最大允许值,上传时应该显示适当的错误消息 14 | 15 | 7.检查上传的图片文件类型外的其它文件时(例如txt、doc、pdf、exe等等), 16 | 17 | 应该显示适当的错误消息。 18 | 19 | 8.检查如果上传的图片满足指定的高度和宽度(如果有定义的话)则可以成功上传,否则不能上传。 20 | 21 | 9.上传大尺寸图片时应显示上传进度条 22 | 23 | 10.检查上传过程中的取消按钮是否有效 24 | 25 | 11.检查文件选择对话框中的文件列表是否只显示支持文件类型 26 | 27 | 12.检查上传多个图像的功能 28 | 29 | 13.上传后检查图像质量,图像质量不应该改变 30 | 31 | 14.检查用户是否能够使用/查看上传的图像 32 | -------------------------------------------------------------------------------- /docs/11-13-定位元素的8个方法是什么-.md: -------------------------------------------------------------------------------- 1 | ## 11-13-定位元素的8个方法是什么- 2 | 3 | 1、通过id定位 4 | 5 | find_element_by_id() 6 | 7 | 2、通过name定位 8 | 9 | find_element_by_name() 10 | 11 | 3、通过 class name定位 12 | 13 | find_element_by_class_name() 14 | 15 | 4、通过css定位 16 | 17 | find_element_by_css_selector() 18 | 19 | 5、通过link定位 20 | 21 | find_element_by_link_text(‘文本’)没有空格一般a链接 22 | 23 | 6、通过 partial_link定位 24 | 25 | find_element_by_partial_link_text(部分文本)--般有空格a链接 26 | 27 | 7、通过 xpath定位 28 | 29 | find_element_by_xpath() 30 | 31 | 8、通过 tag_name定位 32 | 33 | find_element_by_tag_name() 34 | -------------------------------------------------------------------------------- /docs/5-10-微信聊天功能测试用例.md: -------------------------------------------------------------------------------- 1 | ## 5-10-微信聊天功能测试用例 2 | 3 | **消息发送**(单聊,群聊,语音,文字,图片,表情,链接,字符及长度) 4 | 5 | **成员管理**(加人,被加,退出,被动退出,编辑,删除) 6 | 7 | **群组管理**(创建群,消息设置,申请入群,扫二维码入群,退群,通知提醒,头像编辑,名称编辑,简介编辑,权限编辑,成员编辑) 8 | 9 | **消息管理**(发布通知,接收通知,发文件,消息提醒,通知提醒,声音,震动,好友请求,请求处理)**隐私管理**(黑名单,允许好友查看动态,允许陌生人查看动态,允许通过手机号查找,允许真实姓名查找) 10 | 11 | **权限管理**(开放群(任何人入群)、半开放群(验证入群)验证加好友不需验证加好友) 12 | 13 | **登录退出**(忘记密码,更换账号) 14 | 15 | **好友管理**(扫二维码加人,加好友,查好友,好友推荐,群组推荐,联系人导入,拉黑名单,解除好友,备注名) 16 | 17 | **动态管理**(发动态,发投票,点赞,表情,评论,增加,删除,分享,隐藏,编辑 18 | 19 | **消息推送**(在线,离线,收发,时序) 20 | 21 | **文件管理**(接收,离线接收,预览,删除,分享,转存,文件格式,大小) 22 | -------------------------------------------------------------------------------- /docs/9-16--接口测试的工具有哪些-.md: -------------------------------------------------------------------------------- 1 | ## 9-16--接口测试的工具有哪些- 2 | 3 | Fiddler抓包工具,也可以做接口测试 4 | 5 | Postman接口测试工具,支持接口自动化测试 6 | 7 | wireshark支持电脑上各种协议的抓包工具,主要常见有http和tcp抓包 8 | 9 | Soapui功能强大的接口测试工具,性能测试,接口自动化测试 10 | 11 | java+httpclient.jar java代码实现接口自动化测试,一般需要借助单元测试框架junit和 12 | 13 | TestNG接口自动化测试框架设计:java+httpclient+TestNG 14 | 15 | Python + requests python代码实现接口与接口自动化测试,测试框架: unittest,pytest, 16 | 17 | 接口测试框架设计: python+ requests+ unittest+ htmlTestRunner或者python +requests+ pytest 18 | 19 | Loadrunner接口自动化测试,接口性能测试(主要) 20 | 21 | jmeter接口测试,接口自动化测试,接口性能测试(主要) 22 | 23 | Swagger编写在线接口文档,在线接口测试 24 | -------------------------------------------------------------------------------- /docs/11-16-css定位的方法-.md: -------------------------------------------------------------------------------- 1 | ## 11-16-css定位的方法- 2 | 3 | \#通过样式 #id样式, .cass样式为多 4 | 5 | 1. find_element_by_css_selector("#id") 6 | 2. find 7 | 8 | _element_by_css_selector(".classname定位值") 9 | 10 | \#通过元素属性 11 | 12 | 3. find_element_by_css_selector("[name=name定位值]") 13 | 14 | Find_element_by_css_selector("[class=定位值]") 15 | 16 | \#样式,属性结合 17 | 18 | find _element_by_css_selector(div#fanwe_msg_box>table>tbody>tr>td:nth-child(2)>div(@class='dialog-content')) 19 | 20 | 5.父子元素定位 21 | 22 | Find_element_by_css_selector(div#fanwe msg box> table>tbody>tr> td:nth-child(2) 23 | 24 | \>div:nth-child(2)) 25 | -------------------------------------------------------------------------------- /docs/9-6--给你一个新的接口,你怎么去设计用例-.md: -------------------------------------------------------------------------------- 1 | ## 9-6--给你一个新的接口,你怎么去设计用例- 2 | 3 | 首先要对于每个要测的接口都要先搞清楚这个接口的功能,它的作用是什么,熟悉这个业务功能需要用到什么协议,请求方式是什么,接口有哪些参数。对于每个参数的作用都要搞清楚,像数的类型,是否有约束限制,是否为必填的,长度,其他的限制等等,如果两个参数之间有关联我们还要考虑参数的组合场景,对于参数不理解的,一般都会跟开发沟通下,然后考虑返回数据的类型,返回数据中的返回码和返回信息是什么,通过以上几个点去提炼测试点,设计用例。 4 | 5 | 参数约束——长度、必选项、格式、数据类型 6 | 7 | 业务场最——正确的业务场景;错误的业务场景;异常场景:服务器空间不足 8 | 9 | 组合场景——相互依赖:手机和验证码、用户名和验证码; 10 | 11 | 相互排斥:二选一当然还有边界值等价类等等 12 | 13 | Jmeter测试流程,步骤如下: 14 | 15 | 创建 jmeter线程组一添加HPPT请求-输入协议-域-端口-路径-编码-请求方式-请求参数-启动 16 | 17 | Jmeter测试流程: 18 | 19 | 先需求,再根据需求写测试点转换成测试用例,根据测试用例编写测试脚本;执行测试脚本; 20 | 21 | 提交BUG,跟踪BUG 22 | -------------------------------------------------------------------------------- /docs/12-5--Unittest框架如何使用-.md: -------------------------------------------------------------------------------- 1 | ## 12-5--Unittest框架如何使用- 2 | 3 | 1. 导包 4 | 5 | import unittest 6 | 7 | from selenium import webdriver 8 | 9 | import ddt 10 | 11 | 2.定义一个类继承 unittest.TestCase基类 12 | 13 | 重写 setUp(),tearDown()方法 14 | 15 | 3.setUp()方法实现一个初始化的准备工作,比如,实例化 webdriver对象,对 driver进行初始化配置,连接数据库..... 16 | 17 | 4.tearDown()方法实现释放资源的任务。 18 | 19 | 编写用例方法,用例方法必须以test开头 20 | 21 | 5. Unittest如何去运行多个文件或者整个目录 22 | 23 | 因为我们用例全部是放在 test_case目录下统一管理的,基本每个某块都是一个.py文件,要全量跑的话,需要调用 unittest.default.discover()函数,指定用例目录的路径,加载所有的.py文件,它会自动创建测试套件,井把用例加入测试套件中,然后利用unittest.TestRunner()创建一个执行器利用这个执行器去运行测试雷件中的所有用例。 24 | -------------------------------------------------------------------------------- /docs/9-12--依赖于第三方的接口如何测试.md: -------------------------------------------------------------------------------- 1 | ## 9-12--依赖于第三方的接口如何测试 2 | 3 | 1,需要第三方接口的,接口文档 4 | 5 | 2,发送请求到第三方接口,检查第三方接口返回的数据是否正确 6 | 7 | 3,不正确的时候,要跟第三方接口联调,看是请求问题,还是第三方接口返回数据有误, 8 | 9 | 这个我们公司的第三方接口,我们都是打通的,比如电商,我们通过调用微信接口等等,都是打通的,比如要测试下单第三支付,我们自己开店,收款设置我们自己的账号,然后通过商品设计1分钱,去测试的。 10 | 11 | 如果不打通的话,基本也只能抓包,主要保证我们发送出去的数据符合需求文档就行,然后真正的上线之前,我们会在预生产环境做一个联调测试,把各自系统连在一起,做一个联调测试没有问题了 12 | 13 | 我们就可以上线,基本就这么做的 14 | 15 | 联调测试怎么做的: 16 | 17 | 其实联调测试就是数据拉通测试,两个子系统,连在一起,形成一个完整的系统,然后从上游下数据,下游接到数据看传过来的数据是否符合下游的系统要求然后下游做了操作,把数据返回给上游,通知上游说数据返回了,上游看返回的数据是否符合要求,如果没有问题,就这个数据就拉通成功这个都是按照用例来执行,上游和下游一起出一份用例,两边都评审通过,然后按照测试用例执行,每条用例测试通过那么联调测就完成了。 18 | -------------------------------------------------------------------------------- /docs/9-38-有没有做过https接口,具体怎么做.md: -------------------------------------------------------------------------------- 1 | ## 9-38-有没有做过https接口,具体怎么做 2 | 3 | https请求时在http请求中多了ssl证书,对于https请求的接口, 4 | 5 | Requests可以为HTTPS请求验证SSL证书,就像web浏览器一样。要想检查某个主机的 6 | 7 | SSL证书,你可以使用veiy参数 8 | 9 | 处理办法: 10 | 11 | 1、设置 verify= False,requests请求忽略证书的校验,会有警告,提示 12 | 13 | r=requests.get(https://www.baidu.com’,verify=false) 14 | 15 | print (r.text) 16 | 17 | 2、在 verify中设置证书的路径 18 | 19 | requests.get(https://github.com’,verify=’/path/to/证书名字’) 20 | 21 | 3、 verify默认值为true,也可以指定一个本地证书用作客户端证书,可以是单个文件(包含密钥和证书)或一个包含两个文件路径的元组: 22 | 23 | requests.get(‘https://kennethreitz.com',cert=(‘/path/server.crt',/path/key)) 24 | -------------------------------------------------------------------------------- /docs/11-39-自动化中如何去操作数据库.md: -------------------------------------------------------------------------------- 1 | ## 11-39-自动化中如何去操作数据库 2 | 3 | 需要自己封装一个函数 4 | 5 | 1、安装 pymysql: pip install pymysql或者在 pycharm里面安装 pymysql 6 | 7 | 2、导入 mysql: import pymysql 8 | 9 | 3、连接数据库: db_connect= pymysql.connect(host='ip地址', 10 | 11 | user=’root’,password=’’,database=’’,port=’’,charset='utf8') 12 | 13 | 4、建立游标: cursor= db_connect.cursor() 14 | 15 | 5、执行游标: cursor.execute(sql) 16 | 17 | 6、获取数据 18 | 19 | 获取游标中所有数据:all= cursor.fetchall() 20 | 21 | 获取游标中多条数据:many= cursor.Fetchmany() 22 | 23 | 获取游标中第一条所有数据:one= cursor.fenchone() 24 | 25 | 7、关闭游标: cursor.close() 26 | 27 | 8、关闭数据库连接 db_connect.close() 28 | -------------------------------------------------------------------------------- /docs/6-1-Linux系统你是怎么用的-.md: -------------------------------------------------------------------------------- 1 | ## 6-1-Linux系统你是怎么用的- 2 | 3 | [在测试1、执行的过程中,我们发现的bug,有时候需要定位bug,协助开发修复bug时需要在linux里通过命令tail-200或tail-500查看当天的日志的**后面**多少行或者**前面**多少行定位bug或者通过tail -f来查看日志里的关键字 exception(异常) error(错误)。 4 | 5 | [后台程序运行久了会对系统造成卡顿等诸多隐患或我们做性能测试的时候我们都会通过linux的命令Ps -ef显示所有进程)、top(监控程序执行状况)、free -m显示内存使用情况) 6 | 7 | 来查看系统资源如果服务器出现故障时我们也会用(service httpd status)看下服务器是否启动,用ps -ef|grep httpd查看apache进程是否启动,用ps -ef|grepjava查看jdk进程是否启动如果服务器起不来,常见的问题有端口可能被占用,用 netstat- an|grep 8080查看端口是否已被占用。] 8 | 9 | [搭建测试环境的时候我们在是在linux下进行的,搭建LAMP时在线用命令 yum install 10 | 11 | 安装 apache,php以及mysql;或通过 xshell来导入需要的环境包来搭建LTMJ(Tomcat、Mysql、jdk) 12 | -------------------------------------------------------------------------------- /docs/17-7--截取字符串里面部分字符怎么做-.md: -------------------------------------------------------------------------------- 1 | ## 17-7--截取字符串里面部分字符怎么做- 2 | 3 | 1) 一般就是在定义的这个字符串变量后面用中括号[],然后里面填写需要截取的素引数 4 | 5 | print(str[2:1) 6 | 7 | print(str[:2]) # 从开始到2) 8 | 9 | print(str[2:5]) 10 | 11 | print(str[:]) 12 | 13 | 2) 利用字符串的中的内置函数 split() 14 | 15 | str1 = ‘2018-11-20 14:40:00’ 16 | 17 | print("年份: "str1.split(‘’)[0].split(‘-’)[0]) 18 | 19 | print("月份: "str1.split(‘’)[0].split(‘-’)[1]) 20 | 21 | print("日期: "str1.split(‘’)[0].split(‘-’)[2]) 22 | 23 | print("时: "str1.split(‘’)[1].split(‘:’)[0]) 24 | 25 | print("分: "str1.split(‘’)[1].split(‘:’)[1]) 26 | 27 | print("秒: "str1.split(‘’)[1].split(‘:’)[2]) 28 | -------------------------------------------------------------------------------- /docs/11-46-模块封装哪些,封装的目的是什么-有没有自己封装过一些函数-封装过哪些函数-.md: -------------------------------------------------------------------------------- 1 | ## 11-46-模块封装哪些,封装的目的是什么-有没有自己封装过一些函数-封装过哪些函数- 2 | 3 | **模块封装**:封裝界面上的所有元素,一些公共模块(数据库操作,读取exell数据公共方法等), 4 | 5 | 测试数据(返回一些变量,字典列表exell表等),一些元素操作,测试用例等等. 6 | 7 | **封装的目的**:为了后期维护和管理更加方便,如果修改数据时直接在模块中修改就行 8 | 9 | def get_data(filename,tablname): 10 | 11 | \# 1.打开 excel文件 12 | 13 | Book = xrd.open_workbook(filename) 14 | 15 | \# 2.打开一个表 16 | 17 | Sheet = book.sheet_by_name(tablname) 18 | 19 | Print(sheet.nrows) 20 | 21 | \#3.对表操作列,行,单元格 22 | 23 | list = [] 24 | 25 | for i in range(1,sheet.nrows): 26 | 27 | List.append(sheet.row_values(i)) 28 | 29 | return list 30 | -------------------------------------------------------------------------------- /docs/8-1-抓包工具怎么用.md: -------------------------------------------------------------------------------- 1 | ## 8-1-抓包工具怎么用 2 | 3 | 我原来的公司对于抓包这块,在App的测试用得比较多。我们会使用fiddler抓取数据检查结果,定位问题,测试安全,制造弱网环境; 4 | 5 | 如:抓取数据通过查看请求数据,请求行,请求报头,请求正文,信息是否正确去检查结果, 6 | 7 | 如果是以4开头的话就有可能是前端问题一般我会到前端排查,以5开头就有可能是后端 8 | 9 | 问题我就会到后端排查;如果是200的话,就需要检查请求行,请求报头,请求正文是否正确, 10 | 11 | 如果请求错误就是前端问题,如果请求没有问题,那就是后端问题,看后端问题服务器运行日志, 12 | 13 | 是否包含 exception,error或根据时间点去看日志。 14 | 15 | 测试安全,抓取数据查看用户的感敏信息有没有进行加密显示,还有就是把发送请求的数据篡改是否成功。 16 | 17 | 弱网环境,诵过 fiddler工具选择 Customize Ruels...(Ctr+R)调出定义脚本编辑器找到 18 | 19 | “if (m_SimulateModem)”设置上行下行网速,然后把 20 | 21 | Rules-> Performance-> Simulate Modem Speeds选中生效 22 | 23 | 常用抓包工具有:浏览器中F12, fiddler, Charles(青花瓷), wireshark 24 | -------------------------------------------------------------------------------- /docs/15-19-Android跟ios测试有什么区别-.md: -------------------------------------------------------------------------------- 1 | ## 15-19-Android跟ios测试有什么区别- 2 | 3 | Android和ios测试的共同点都需要进行界面测试、功能测试、兼容性测试、网络测试、交互性测试、易用性专项测试、异常测试、安全专项测试以及权限测试。不同的是 Android测试除了以上的测试之外还要用 monkey进行稳定性专项测试以及用 emmagee或者gt进行性能专项测试。los是用itools工具对功能进行测试:安装、传输文件以及查看日志。 4 | 5 | 从操作系统,安装卸载,按键操作,开发语言这几个方面去区分操作系统: android操作系统较多,iOS较少只能升级不能降级,并目新的版本的资源库不能完全兼容旧版中系统中的应用,如果低版本应用调用了高版本的资源库,可能会导致系统崩溃。 6 | 7 | 安装卸载测试,应用发布后:下载安卓包的平台和渠道很多:豌豆英、应用宝、360手机助手等; 8 | 9 | iOS主要有 App store、 iTunes,安全性会更高点 10 | 11 | 本地测试:安卓手机可以通过扫码或者直接安卓APK包安装测试包;iOS要安装测试包必须绑定手机的id(证书)才可以安装ipa测试包 12 | 13 | 按键操作测试:安卓手机针对每一款手机有不一样的操作;苹果手机操作习惯单一 14 | 15 | 开发语言:虽然同样的业务安卓和iOS的展示形式和业务一致,但是底层全完不一样,安卓的应用是有java语言实现的,iOS用OC实现。 16 | -------------------------------------------------------------------------------- /docs/15-8-App的性能测试.md: -------------------------------------------------------------------------------- 1 | ## 15-8-App的性能测试 2 | 3 | 内容要点: 4 | 5 | 指标:cpu,内存,电量,流量,FPS, 6 | 7 | 怎么测? cpu,内存,流量 android studio 8 | 9 | cpu不能超过10-20% 普通业务要求在10%左右,核心的业务,尤其是一些绘图的业务, 10 | 11 | 要求在20%左右。指标:SE给到,竞品分析 12 | 13 | 内存主要看有内存泄露的情况,怎么看? 14 | 15 | 流量:一刷新使用软件,流量会逐渐增加 16 | 17 | 具体操作: 18 | 19 | 1,对于cpu内存,流量这3个指标,我们用的 android studio来检测的,结合sdk里面的一个插件 android Monitor,它可以帮我们试试检测cpu,内存,流量的曲线图 20 | 21 | 2,这里我们需要开启手机端的开发者模式,还有usb调试模式,例外,开发给我们提供的apk包,必须需要开启 debug模式,开发开启之后打包给测试人员就可以了 22 | 23 | 3,主要就是对我们需要测的功能进行操作,然后实时查看图表,看他是否有内存oom内存泄漏,cpu是否使用过高,是否有内存抖动,造成的卡顿等现象,是否有图片过大造成流量使用过大这些问题等,是否有频繁使用流量,没有使用缓存等问题 24 | 25 | 4,像fps帧率是通过adb命令来测的,还有电量我们当时用的是手机自带的一个第三方软件测的? 26 | -------------------------------------------------------------------------------- /docs/14-3-你们性能观察哪些指标,大概指标范围是怎么样的。.md: -------------------------------------------------------------------------------- 1 | ## 14-3-你们性能观察哪些指标,大概指标范围是怎么样的。 2 | 3 | 对于指标这块,业务方面的指标主要有:并发数,90%用户的平均响应时间 4 | 5 | 错误率,吞吐量/吞吐率这些,例外还需要关注服务器资源的使用情况,像:CPU的使用率、内存的占有率,磁盘IO,网络。 6 | 7 | 我们那个项目当时只针对,登录,搜索查询,下订单,购物车相关接口,支付等业务做了些简单的并发,压测这块,指标大概是这样的: 8 | 9 | 单基准业务并发测试登录,注册,查询1s以内,下订单,购物车相关接口,支付2s以内,混合业务性能:5s以内 10 | 11 | 响应时间:登录,注册业务<2s之内查询,下订单,购物车,支付业务<3s 12 | 13 | 充值,提现,查看充值日志,查看提现日志业务查询标的,<3s 14 | 15 | 投标,申请借款<5s 16 | 17 | 错误率:0 18 | 19 | 吞吐量/吞吐率:200左右请求/sec 20 | 21 | CPU:80%以内 22 | 23 | 内存:80%以内 24 | 25 | I/O: %util<=80%,%nowait<=20% 26 | 27 | %util: 磁盘一秒中有百分之多少的时间用于I/O操作, 28 | 29 | % nowait:磁盘等待处理时间占比 30 | 31 | 带宽:<=系统带宽的30%,无丢包,无延迟,无阻塞 32 | -------------------------------------------------------------------------------- /docs/8-14-http协议包含哪些内容.md: -------------------------------------------------------------------------------- 1 | ## 8-14-http协议包含哪些内容 2 | 3 | (1)请求信息 4 | 5 | 1)请求行:请求方式、请求地址http版本1.1 6 | 7 | 2)请求头 8 | 9 | HTTP消息报头包括普通报头、请求报头、响应报头、实体报头 10 | 11 | Cache- Control:no- cache 缓存 12 | 13 | Connection:close/keep-aive 是否关闭或者保持连接 14 | 15 | Accept-Charset:ios-859-1 字符集 16 | 17 | Accept-Encoding:gzip.deflate 编码格式 18 | 19 | Accept-Language:zh-cn 语言 20 | 21 | Authorization:服务器授权验证 22 | 23 | Host:主机 24 | 25 | User-Agent: 26 | 27 | Location:重定向 28 | 29 | Server:服务器版本信息 30 | 31 | Content-Encoding:实体报头的编码格式 32 | 33 | 请求正文 34 | 35 | data 36 | 37 | (2)响应信息 38 | 39 | 1)状态行:http版本、状态码、状态信息 40 | 41 | 2)响应头:跟请求头一样 42 | 43 | 3)响应正文: 44 | -------------------------------------------------------------------------------- /docs/5-8-微信点赞.md: -------------------------------------------------------------------------------- 1 | ## 5-8-微信点赞 2 | 3 | 功能测试: 4 | 5 | 1)给某个好友点赞,点赞数+1,点赞栏显示具体点赞人的名字,该用户手动点赞回馈 6 | 7 | 2)点完赞后,共同好友在点赞区能看到该人是不是点赞了,非共同好友看不到 8 | 9 | 3)两个头像一样的人点赞,能否正确显示 10 | 11 | 4)点完赞后,在点击点变成点赞取消 12 | 13 | 5)取消点赞-不通知用户 14 | 15 | 6)点赞后,通知用户,取消,在点赞,此时不通知用户 16 | 17 | 7)多个用户同时对其点赞,点赞数正常 18 | 19 | 8)最多能点多少个赞-边界值测试 20 | 21 | 9)可以从点击点赞区头像,进入相应人的主页查看 22 | 23 | 10)点赞是否按照时间顺序排序 24 | 25 | 11)点赞后是否能够正常评论 26 | 27 | app端测试: 28 | 29 | 1)弱网情况下,点赞能否实时更新 30 | 31 | 2)点赞时,有短信或者电话进来,能否显示点赞情况 32 | 33 | 3)耗电量,耗流量关注 34 | 35 | 性能测试: 36 | 37 | 1)大量用户并发点赞时,该接口的响应时间,最大承受的qps 38 | 39 | 2)大量用户并发点赞时,此时界面进行点赞,点赞功能是否正常 40 | 41 | 兼容性测试: 42 | 43 | 1)不同手机型号,点功能,显示功能是否正常 44 | -------------------------------------------------------------------------------- /docs/15-2-Web测试与app测试区别-.md: -------------------------------------------------------------------------------- 1 | ## 15-2-Web测试与app测试区别- 2 | 3 | 其实功能这块,app测试与Web测试基本是一样,没有什么区别。(需求分析->提炼测试点>编写测试用例->执行用例->提Bug->复测,回归)等等的。 4 | 5 | 区别主要在于,web端是B/S架构的,App是C/S架构的,由于架构的不同,所以web端一般服务器更新的时候,客户端不需要更新, 6 | 7 | 因为它是通过浏览器来访问的,服务器更新了,客户端也更新。app服务端要更新,同时客户端软件要进行升级更新,才算是新的版本。 8 | 9 | 对于app测试来讲,除了功能之外,更多的还要考虑一些专项测试,比如: 10 | 11 | Web测试是基于浏览器的所以不必考虑安装卸载。而app是客户端的,则必须测试安装、更新、卸载 12 | 13 | 兼容性、稳定性、性能测试、弱网测试、交互性测试等等。 14 | 15 | 还有就是,对于兼容性这块,Web端主要考虑是:不同的浏览器,不同的操作系统的兼容性接口。 16 | 17 | 而对于app测兼容性更多的考虑:不同的品牌机型,不同操作系统,不同手机屏幕大小,屏幕分辨率 18 | 19 | 性能方面也会有所不同:Web端性能测试更多关注的后台的性能, 20 | 21 | app的性能测试关注的是手机本身的资源的性能问题: 22 | 23 | 比如:CPU内存,电量,流量,页面加载响应时间,软件启动时间等等 24 | 25 | 他们两个之间的区别差不多就这些吧。 26 | -------------------------------------------------------------------------------- /docs/9-2--两个接口有关联,-jmeter具体怎么做.md: -------------------------------------------------------------------------------- 1 | ## 9-2--两个接口有关联,-jmeter具体怎么做 2 | 3 | 另外两种问法:上个接口的返回值是下个接口的请求参数,这种如何处理?动态关联有没有了解过? 4 | 5 | 这个涉及到动态关联,首先要搞清楚后一个接口需要用到上一个接口的什么数据,例外要看数据是在哪里取的,是在head还是在body里,然后如果要取的数据是json格式我会在发请求用json提取器去取这个数据,如果是其他格式的就用边界提取器或正则表达式去取数据 6 | 7 | 就拿我当时做的那个下单接口来说吧,因为下单接口需要先登录,需要用到登录接口的 8 | 9 | cookies来做鉴权,首先就是把登录接口调试通过,然后在登录接口的http请求中添加一 10 | 11 | 个边界值提取器或者也可以用正则表示式提取器去提取登录接口的响应头中的 cookies值 12 | 13 | 然后在下单接口中需要添加一个http cookies管理器,在http cookies管理器中引用登录 14 | 15 | 接口提取出来的 cookies,这样就可以了 16 | 17 | 如果是不同的线程组的话,那在登录接口中还得添加一个 Beanshell取样器,在 18 | 19 | Beanshell取样器中,利用函数助手中的 SetProperty()函数把提取出来的 cookies设置为全局变量,然后在下单接口的http cookies管理器中利用函数助手中的Property()函数引用登录接口中设置的全局变量,这样就可以了。 20 | -------------------------------------------------------------------------------- /docs/15-20-小程序怎么测试.md: -------------------------------------------------------------------------------- 1 | ## 15-20-小程序怎么测试 2 | 3 | 1,小程序测试(多用第一人称,口语化表达,多讲一些,讲细一些,先宏观,在微观)参考面试问题STAR法则: 4 | 5 | 我们原来主要测试,几个方面,界面测试,功能测试,交互性测试,兼容性测试,安全测试, 6 | 7 | 易用性测试,异常测试,权限测试 8 | 9 | 界面测试:主要是测试跟界面的原型图是否一致,同时我也要考虑不同屏幕大小跟分辨率 10 | 11 | 功能测试:跟所有的功能测试都是一样的,还有小程序有位置功能,检查下,微信小程序,附近中是否能找到对应小程序,使用小程序是否记录, 12 | 13 | 交互性测试:要考虑跟微信的功能交互使用,比如说一些,卡包,支付等功,考虑跟手机固有功能交互,比如说来电,短信等 14 | 15 | 兼容性测试:考虑跟微信不同版本的兼容,还有同时还要考虑不同手机厂商跟手机型号兼容,还要考虑当微信清除缓存后,小程序还能否继续使用 16 | 17 | 安全测试:测试数据加密,包括sql与xss脚本攻击这块 18 | 19 | 易用性测试:考虑功能是否方便还用 20 | 21 | 异常测试:考虑断网,手机重启,关机的情况 22 | 23 | 权限测试:小程序继承微信权限,测试手机对微信权限,还要考虑微信对小程序授权,是否允许操作 24 | 25 | 原来我们测试阶段,上传小程序到微信小程序平台,上传到开发版本里面,通过扫描二维码去下载小程序进行测试, 26 | 27 | 上线后,我们也要测试下,微信搜索小程序中能否搜索的到 28 | -------------------------------------------------------------------------------- /docs/15-1-app测试你具体怎么做的-.md: -------------------------------------------------------------------------------- 1 | ## 15-1-app测试你具体怎么做的- 2 | 3 | 对于App这块,我们一般首先都先做功能,先保证功能过关是第一位,对于功能这块的话,基本都跟Web端是一样的。 4 | 5 | 除了功能之外,公司还要求做了一些专项测试,像:安装,卸载测试,兼容性测试,稳定性测试,性能测试,弱网测试,交互性测试,都有测试过的,专项测试这块,我主要负责的是:兼容性测试,稳定性测试,性能测试,弱网测试,交互性测试,这是我这边负责的。 6 | 7 | 像兼容性测试,公司有提供了差不多了7-8款的真机,像:华为,小米,三星, vivo, oppo等这些主流的机型都在真机想有测试过,其他的机型,公司用的是云测,云测平台我们用的Testln这个平台,公司会给我们提供账号。 8 | 9 | 稳定性测试这块,用的 Monkey命令工具去测的,主要就是通过 monkey模拟用户发送一些伪随机时间,看app是否有Crash, ANR, Exception等现象,一般都是在晚上的时候去执行 monkey命令,然后出报告,分析性能测试,用的GT工具结合 Android Studio工具去检测app在手机上运行的时候的CPU,内存,电量,流量,启动时间,安装,卸载时间以及页面的响应时间。 10 | 11 | 弱网我们用的 fiddler工具去进行模拟的,模拟2G/3G/4G等弱网场景,看app在弱网情况,功能是否能正常使用。 12 | 13 | 交互性测试这块主要就是看app与其他应用程序之间的交互运行,以及与系统应用程序之间交互运行,来回进行前后台切换,看是否会出现闪退,数据丢失等现象。 14 | -------------------------------------------------------------------------------- /docs/11-44-assert-般断言哪些.md: -------------------------------------------------------------------------------- 1 | ## 11-44-assert-般断言哪些 2 | 3 | 1、提取元素text断言: 4 | 5 | User_text=driver.find_element_by_css_selector(("#j_account>a").text #获取实际的值 6 | 7 | (展示账户名内容) 8 | 9 | assert'admin'in user_text #断言 admin在实际值里 10 | 11 | 2、提取元素属性去断言: 12 | 13 | Login_button_value=driver.find_element_by_id("lajax-login-submit").get_attribute(value)#获取登录按钮的属性vaue值是登录 14 | 15 | assert'登录'== login_button_value #断言‘登录’是这个按钮的属性 16 | 17 | 3、提取界面title值去断言: 18 | 19 | assert"p2p信贷最大、最安全的网络借贷平台"in driver.title,"失败"或者in改为 not in 20 | 21 | 4、提取元素是否可用来进行断言 22 | 23 | assert driver.find_element_by_css_selector("div.user_money > a:nth-child(1)").is en 24 | 25 | abled==True,"元素不存在。不可用" 26 | 27 | 5、数据库断言,去数据库查询结果,是否跟预期一致 28 | -------------------------------------------------------------------------------- /docs/11-21-如何去定位滚动条-滚动条怎么处理-.md: -------------------------------------------------------------------------------- 1 | ## 11-21-如何去定位滚动条-滚动条怎么处理- 2 | 3 | 一般当我们西面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接操作的,会报元素不可见异常的。这时候需要借助滚动条来拖动屏幕,使被操作的元素显示在当前的屏幕上,selenium提供了一个操作js的方法: execute.script(),可以直接执行js的脚本, 4 | 5 | 滚动到底部: 6 | 7 | Js='var q=document.getElementByld('id')scrollTop=10000' 8 | 9 | Driver.execute_script(js) 10 | 11 | 滚动到顶部: 12 | 13 | js='var q=document.documentElementscrollTop=0' 14 | 15 | driver.execute_script(js) 16 | 17 | \#把滚动条拉到指定位置 18 | 19 | 虽然用上面的方法可以解决拖动滚动条的位置问题,但是有时候无法确定我需要操作的元素在什么位置,有可能每次打开的页面不一样,元素所在的位置也不一样,这个时候我们可以先让页面直接跳到元素出现的位置,然后就可以操作了。 20 | 21 | Target_element = driver.find_element_by_xpath(‘//*[@id="4"]/h3/a’) 22 | 23 | Driver.execute_script("arguments[O].scrollIntoView();",target_element) 24 | -------------------------------------------------------------------------------- /docs/10-13--jmeter运行完成后如何去自动发送邮件-.md: -------------------------------------------------------------------------------- 1 | ## 10-13--jmeter运行完成后如何去自动发送邮件- 2 | 3 | (1)监听器中添加-邮件观察仪 4 | 5 | 文件名-运行完成,保存运行结果的位置 6 | 7 | from邮件的发送人 8 | 9 | isz181xiongmao@126.com 10 | 11 | addressee邮件的接收人(多个人用逗号隔开) 12 | 13 | success subject运行成功,发送邮件标题 success limit大于运行请求成功的次数 14 | 15 | failure subject运行失败,发送邮件标题 failure limit大于运行请求失败的次数 16 | 17 | host邮件服务器地址smtp.126cm 18 | 19 | login邮件服务器登录用户名密码(授权码) 20 | 21 | 1、文件名:只需要给出路径和保存的文件名称即可,给定之后将会把测试结果的数据写入到文件中 22 | 23 | 注:它不会将此文件已附件的形式在邮件中,只是将测试结果写入到了定的此目录文件中, 24 | 25 | 如果你运行完脚本,直接在此路径下打开此文件就可以看到运行结果 26 | 27 | 2、 Success Limit与 Failure Limit:当成功数与失败数为几时进行邮件的发送(注意:此处是大于给定的数值,不是等于),我写的1,则失败2次后将发送邮件通知我, 28 | 29 | 3、当测试结果100%成功时则不会发送邮件 30 | 31 | 4、写代码java编写 beanshell后置处理器 32 | -------------------------------------------------------------------------------- /docs/16-2-appscan的原理是什么.md: -------------------------------------------------------------------------------- 1 | ## 16-2-appscan的原理是什么 2 | 3 | 对一个综合性的大型网站来说,可能存在成干上万的页面。以登录界面为例,至少要输入用户名和密码,即该页面存在两个字段,当提交了用户名和密码等登录信息,网站需要检查是否正确,这就可能存在一个新的检查页面这里的每个页面的每个参数都可能存在安全漏洞,可能成为被攻击对象。 AppScan正是通过按照设定策略和规则,对Web应用进行安全攻击,以此来检查网站是否存在安全漏洞。 4 | 5 | 在使用 AppScan的时候,通过配置网站的URL网址, Appscan会利用“探索”技术去发现这个网站存在多少个目录,多少个页面,页面中有哪些参数等,即探索出网站的整体结构通过“探索”可确定测试的目标和范围,然后利用 AppScan的扫描规则库,针对发现的每个页面的每个参数,进行安全检查。 6 | 7 | 简言之, APPScan的工作原理如下: 8 | 9 | 1) 通过“探索”功能,利用 Http Request和 Response的内容,爬行出指定网站的整个Web应用结构。 10 | 2) AppScan本身有一个内置的漏洞扫描的规则库,可随版本进行更新,从探索出的url中,修改参数or目录名等方式,构造不同的url对照组向服务器发送请求or攻击。 11 | 3) 根据 Http Response返回的内容,和正常请求所返回的响应作对比,是否产生差异性,而这种差异性又是否符合扫描规则库的设定规则,以此来判断是否存在不同类型的安全洞。 12 | 4) 若 APPScan可判断存在安全漏洞,则对这些漏洞的威胁风验给出说明,进行严重程度提示,并给出修复的建议和方法,以及漏洞发现的位置提示。 13 | -------------------------------------------------------------------------------- /docs/11-11--Selenium2与-Selenium1的区别是什么-.md: -------------------------------------------------------------------------------- 1 | ## 11-11--Selenium2与-Selenium1的区别是什么- 2 | 3 | Selenium1.0使用的是 Javascript注入技术与浏览器打交道,需要 Selenium启动一个 Server,将操作Web元素的AP调用转化为一段段 Javascript,在 Selenium内核启动浏览器之后注入这段 Javascript,开发过Web应用的人都知道, Javascript可以获取并调用页面的任何元素,自如的进行操作,由此才实现了 Selenium的目的:自动化Web操作,这种 Javascript注入技术的缺点是速度不理想,而且稳定性大大依赖于 Selenium内核,对API翻译成的 Javascript 质量高低 4 | 5 | Selenium2.0则是把 selenium1.0中 selenium RC替换为了 Web Driver 6 | 7 | WebDriver利用浏览器原生的API,封装成一套更加面向对象的 SeleniumWebDriverAPI 8 | 9 | 直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口大小,启动,关闭,安装播件,配置证书之类的),由于使用的是浏览器原生的AP,速度大大提高,而且调用的稳定性交给了浏览器厂商本身,显然是更加科学,然而带来的一些副作用就是,不同的浏览器厂商,对Web元素的操作和呈现多少会有一些差异,这就直接导致了 SeleniumWebDriver要分浏览器厂商不同,而提供不同的实现例 Firefox就有专门的 Firefox Driver, 10 | 11 | Chrome就有专门的 ChromeDriver等等 12 | -------------------------------------------------------------------------------- /docs/11-28-定位不到元素,你碰到过哪些-怎么解决的-.md: -------------------------------------------------------------------------------- 1 | ## 11-28-定位不到元素,你碰到过哪些-怎么解决的- 2 | 3 | 1、像页面加载延迟的问题,这个需要通过等待延迟的方式来处理。 4 | 5 | 2、不过有时候,页面加载完成,但是元素暂时还不可见,导致定位不成功 6 | 7 | 这个可以选择使用显示等待来处理,这里需要用到 WebDriverWait类来实现 8 | 9 | 3、还有就是像内嵌网页的问题,需要使用 driver.switch_to.frame(name/index)这个函数来跳转到处理。 10 | 11 | 4、还有要注意多窗口问题,动态id问题等的问题,对于多窗口处理,可以使用 12 | 13 | driver.switch_to.window()的方式来进行处理,而对于动态id的问题,需要注意的是有些id跟数字有关,可能会动态变化,可以使用xpath也可以使用 css_select属性定位或者样 14 | 15 | 式定位,或者可以通过父元素来找元素,或者通过兄弟节点来找对应的元素。等等 16 | 17 | 5、还有要特别注意滚动条的问题,这里通过调用js代码来实现的,driver.execute_script(js) 18 | 19 | 6、再这就是有时候会碰到某些元素的是不可见的,比如 display属性为none这就需要通过 java Script修改 display的值。 20 | 21 | js ='document. querySelectorAll("select")[1]. style. display="block"; 22 | 23 | driver.execute_script(js) 24 | -------------------------------------------------------------------------------- /docs/11-23、如何去处理上传-Windows文件-.md: -------------------------------------------------------------------------------- 1 | ## 11-23、如何去处理上传-Windows文件- 2 | 3 | 1.可直接赋值 send_keys输入图片的地址 4 | 5 | 其实上传文件的按钮就是一个 input元素,只是它的type类型是file类型, 6 | 7 | 我们在处理这种上传文件的按钮的时候,可以直接通过普通定位方式去定位它, 8 | 9 | 再利用 send_keys方法去输入图片的地址就可以了。 10 | 11 | Load_file_element=driver.find_element_by_xpath(‘/html/body/div(8l/div(1)/div(2/div/div[3]/form/div/div/div/inpu’) 12 | 13 | 2.需要用到一个工具,Autolt工具 14 | 15 | 帮助我们识 Windows控件信息利用Autolt生成一个操作 Windows对话框的exe执行文件 16 | 17 | 然后在 python代码中去调用这个可执行文件 18 | 19 | 这里需要用到os模块,利用 os.system去执行 windows的exe文件, 20 | 21 | 把exe文件的路径传入,并传入需要上传的图片的路径即可 22 | 23 | Drver.fnd_ement_by_xpath(‘html/body/divoiv1/dw2]/div/div3form/dvd/di)cick()#点击浏览 24 | 25 | time.sleep(1) 26 | 27 | ossystem(C:\Users\\Administrator\\ Desktop\\AA.exe D:\\QQ.png) 28 | -------------------------------------------------------------------------------- /docs/9-14--接口传输格式有哪些.md: -------------------------------------------------------------------------------- 1 | ## 9-14--接口传输格式有哪些 2 | 3 | 常见的媒体格式类型如下: 4 | 5 | text/html:HTML格式 6 | 7 | text/plain:纯文本格式 8 | 9 | text/xm:XML格式 10 | 11 | Image/gif:gif图片格式 12 | 13 | mage/jpeg:jpg图片格式 14 | 15 | Image/ng:png图片格式 16 | 17 | 以 application开头的媒体格式类型 18 | 19 | application/xhtm + xml: XHTML格式 20 | 21 | application/ml:XML数据格式 22 | 23 | application/atom + xml: Atom XML聚合格式 24 | 25 | application/json:JsoN数据格式 26 | 27 | application/pdf:pdf格式 28 | 29 | application/msword:Word文档格式 30 | 31 | application/octet-stream:二进制流数据(如常见的文件下载) 32 | 33 | application/x-www-form-urlencoded:encoded: