Web自动化测试
selenium中hidden或者是display = none的元素是否可以定位到?
不能,可以写JavaScript将标签中的hidden先改为0,再定位元素
Selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?
1.添加元素智能等待时间 driver.implicitly_wait(30)
2.添加强制等待时间(比如python中写 sleep)
3.try 方式进行 id,name,clas,x path, css selector 不同方式进行定位,如果第一种失败可以自动尝试第二种
如何提高Selenium脚本的执行速度?
代码优化,多任务,分布式部署都是可以提升脚本执行速度的。
用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性?
1.time.sleep( )
2.driver.implicitly_wait(30)
3.多用 try 捕捉,处理异常
你的自动化用例的执行策略是什么?
自动化测试与软件开发本质上是一样的,利用自动化测试工具,经过测试需求分析,设计出自动化测试用例,从而搭建自动化测试的框架,设计与编写自动化脚本,验证测试脚本的正确性,最终完成自动化测试测试脚本(即主要功能为测试的应用软件)并输出测试结果
自动化测试的时候是不是需要连接数据库做数据校验?
从数据库层面来进行数据校验可以更方便验证系统的数据处理方面是否正确,数据处理逻辑正常后,UI层面上的校验也是需要做的。
id,name,class,xpath, css selector这些属性,你最偏爱哪一种,为什么?
css 、xpath 几乎所有的元素都可以定位到,但是它们的短处在于页面上更改了元素后位置很容易改变,所以首先使用的还是id或者name等。
如何去定位页面上动态加载的元素?
触发动态加载元素的事件,直至动态元素出现,进行定位
如何去定位属性动态变化的元素?
xpath或者css通过同级、父级、子级进行定位
点击链接以后,Selenium是否会自动等待该页面加载完毕?
会的,java binding在点击链接后会自动等待页面加载完毕。
什么是page object设计模式?
简单来说,就是把页面作为对象,在使用中传递页面对象,来使用页面对象中相应的成员或者方法,能更好的体现面向对象语言(比如java或者python)的面向对象和封装特性。
如何在定位元素后高亮元素(以调试为目的)?
用JavaScript等脚本来重置元素属性,给定位的元素加背景、边框。
.style.border=\"1px solid red\";
什么是断言?
断言的英文是assertion,断言检查的英文是assertion checking。断言是指定一个程序必须已经存在的状态的一个逻辑表达式,或者一组程序变量在程序执行期间的某个点上必须满足的条件。
adb
安卓中如何取出日志信息?
1.把安卓系统日志信息实时导入到本地:adb logcat-v time>d:\mylog.log
2.运行使用某个app,实时获取该 app 的日志信息(cmd里面的返回信息):
adb shell monkey -p com.android.calendarv 1000>d:\mylog2.log
常见的 adb命令:
1.查看当前连接的设备:adb devices
2.安装软件:adb install 路径\xx.apk
3.卸载软件:adb uninstall <包名>
4.从电脑上发送文件到设备:adb push<本地路径><远程路径> adb push C:\test1.txt/sdcard/
5.从设备上下载文件到电脑:adb pull<远程路径><本地路径> adb pull /sdcard/test1.txt D:
6.实时获取日志:adb logcat-v time>D:\mylog.log
7.登录终端设备shell:adb shell
8.查找包名/活动名:adb logcat|findstr START(脚本中,cmp=后面的值就是包名/activity名称)
9.启动APP启动:adb shell am start -n packageName/activity
10.监控APP启动时间:adb shell am start -W packageName/activity
11.关闭app语法:adb shell am force-stop 包名
12.Monkey命令:adb shell monkey -v -p mypackage 50
网络
HTTP和HTTPS协议区别?
答:
https协议需要到CA(CertificateAuthority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用;
http是超文本传输协议,信息是明文传输,Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全;
http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443;
HTTPS在在哪一层?
应用层
OSI模型:
TCP/I P模型
接口
常见的POST提交数据方式答:
主要有四种方式:
application/x-www-form-urlencoded
multipart/form-data
application/json(text/xml)
binary :文件以二进制上传
get和post区别是什么?
POST和GET都是向服务器提交数据,并且都会从服务器获取数据。
区别:
1)传送方式:get通过地址栏传输,post通过报文传输
2)传送长度:get参数有长度限制(受限于url长度),而post无限制
3)GET产生一个TCP数据包(对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200返回数据),POST产生两个TCP数据包(对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok返回数据)
4)get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留
5)在做数据查询时,建议用GET方式;而在做数据添加、修改或删除时,建议用post方式
cookie和session和token的区别
答:
都是用于鉴权并且都是服务器生成
cookie数据存放在客户的浏览器上,session数据放在服务器上
cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session
session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面应当使用cookie
单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,可以将登陆信息等重要信息存放为session;其他信息需要保存,可以放在cookie
session可以通过cookie传输
token存储在服务器的数据库里面,通常通过一个接口或登陆获取,然后后续所有的接口都必须要传token才能请求成功,tonken也可以通过cookie传输。
请求接口中常见的返回状态码
答:
1xx--信息提示(表示临时的响应。客户端在收到常规响应之前,准备接收一个或多个1xx响应)
2xx--成功(表明服务器成功地接受了客户端请求)
3xx--重定向(客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求)
4xx--客户端错误(发送错误,客户端有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份证验证信息)
5xx--服务器错误(服务器由于遇到错误而不能完成该请求)
常见的返回码有:
200:服务器成功返回用户请求的数据
201:用户新建或修改数据成功
202:表示一个请求已经进入后台排队(异步任务)
204:用户删除数据成功
301:请求资源被永久的迁移到新地址
302:请求资源被临时的迁移到新地址
400 :用户发出的请求有错误,服务器没有进行新建或修改数据的操作
401:表示用户没有权限(令牌、用户名、密码错误)
403:表示用户得到授权(与401错误相对),但是访问被禁止
404:请求资源没找到
500 :服务器发生错误,用户将无法判断发出的请求是否成功
什么是DNS?
DNS 是域名系统 (DomainName System),DNS是用来做域名解析的,它会在你上网输入网址后,把它转换成IP,然后去访问对方服务器;没有它,你想上百度就要记住百度的IP,但有了DNS的处理,你只需要记住对应网站的域名,即网址就可以了。
请问你们公司是如何做接口测试的?
答:接口测试实际跟一般测试不同就是测试用例的设计部分。
1)拿到接口api文档(一般会得到接口文档,如果没有可以通过抓包工具获得)熟悉接口业务、鉴权方式、入参、错误码、返回参数
2)编写接口用例及评审
思路:
正例:输入正常入参,接口能返回数据
反例:
a.鉴权反例:鉴权码为空、鉴权码错误、鉴权码过期、失效等等
b.参数反例:参数为空、类型异常、长度异常
c.错误码覆盖:根据具体业务而定
d.其他:接口黑名单、调用次数限制、分页场景
3)使用接口测试工具postman执行接口测试
4)Postman+Newman+Jenkins实现持续集成,输出测试报告,发送邮件。
在手工接口测试或者自动化接口测试的过程中,上下游接口有数据依赖如何处理?
答:用一个全局变量来处理依赖的数据,比如登录后返回token,其它接口都需要这个token,那就用全局变量来传token参数。
依赖于第三方数据的接口如何进行测试?
答:mock。
当一个接口出现异常时候,你是如何分析异常的?
答:
先抓包,用fiddler(charles)工具抓包,或者浏览器上F12调试工具;
APP上的话,那就用Fiddler做代理,通过手机设置代理去看请求和返回报文;
查看后端日志,如Linux系统通过xhell连上服务器,查看接口日志,查看是否有报错信息(命令:tail-f日志文件);
在python中进行数据驱动
测试在unittest中,没有自带的数据驱动,我们得借助ddt来实现,
首先,我们得在python运行环境中安装ddt,用下列命令安装pip install ddt
另外一个测试框架pytest它自带数据驱动实现,是通 过@pytest.mark.parametrize(argnames,argvalues) 来实现参数化的。也可以根据自己需求用python实现数据的读取和驱动。