1. GET和POST有哪些区别?
1). get参数通过url传递,post则放在请求体中;
2). get请求在url中传递的参数有长度限制,因此数据传输量较小(最大为2kb左右),post传输的数据量相对较大
3). get相对post来说,不太安全,因为参数直接暴露在url中,所以不能用来传递敏感信息,如登录名、密码等
4). get幂等,post不幂等。幂等是指同一个请求方法执行多次和执行一次的效果完全相同
5). get请求用于信息获取,不会更改服务器的状态,而post请求会
2. 写一下冒泡排序
def bubble_sort(my_list): #i分别遍历每一个列表元素的下标 for i in range(len(my_list)): #j分别遍历i之后的每一个列表元素的下标 for j in range(i+1, len(my_list)): #下标为i的元素分别和下标为j的元素相比,如果前者比后者大,则交换两者的位置 if my_list[i] > my_list[j]: my_list[i], my_list[j] = my_list[j], my_list[i] return my_list a = [9, 8, 6, 3, 5] print(bubble_sort(a)) 结果: [3, 5, 6, 8, 9]
3. 简述一下TCP与IP的区别
1). 所处位置不同
TCP全称传输控制协议,它位于TCP/IP模型中的传输层,而IP协议位于TCP/IP模型中的网络层
2). 可靠性不同
TCP协议通过三次握手,能够提供可靠的字节流服务
IP协议负责传送数据包,并不能保证数据包的完整
4. Selenium自动化,遇到iframe如何处理?
对于非嵌套的iframe
1). 从主页面切换到iframe:driver.switch_to.frame(参数) frame的参数可以是iframe标签的name值,可以是id,也可以是下标,还可以是一个iframe元素对象
2). 从iframe切换回主页面:driver.switch_to.default_content()
对于嵌套的iframe
1). 从主页面切换到指定的iframe:driver.switch_to.frame(参数) 参数可以是id
2). 从子iframe切换到父iframe:driver.switch_to.parent_frame()
5. 遇到<d1 class="inf_bar clearfix">这种class中间有空格的控件,如何通过class定位?
1). 不能直接用class_name来定位,否则会报错
2). 可以采用xpath定位,结合xpath中的contains()函数,定位表达式为 //d1[contains(@class, 'inf_bar')]
3). 可以采用CSS定位,定位表达式为 .inf_bar.clearfix (空格变成.)
6. COOKIE与SESSION有什么区别?
1). 保存的位置:cookie保存在客户端,服务器可以知道其中的信息,session保存在服务器,客户端不知道其中的信息
2). 保存的类型:cookie中保存的是字符串,session中保存的是对象
3). 安全性:cookie安全性差,session安全性高
4). 对服务器的影响:session会在一定时间内保存在服务器。当访问增多,会比较占用服务器的性能,考虑到减轻服务器压力,应当使用cookie
5). 生命周期:在不设置条件的情况下两者都是在浏览器关闭后小时(可在客户端设置cookie的存活时间,也可在服务器端设置session的存活时间)
注意:因为session的运行依赖session id,而session id是存在cookie中的,也就是说,如果浏览器禁用了cookie, 同时session也会失效(但是可以通过其它方式实现,比如在url中传递 session_id)
7. Web端功能自动化,如何实现(非input型上传)上传文件
对于非input标签的上传,需要借助第三方工具
1) Python pywin32库结合winSpy,识别对话框句柄,进而操作
2) 还可以利用AutoIt,调用其生成的au3或exe文件
8. 测试中遇到readonly属性的控件,需要如何处理?简述一下思路
基本思路:先用js去掉readonly属性,然后直接输入文本内容
比如12306的车票查询,日期一栏默认是readonly,可以用js方法 ele.removeAttribute("readonly") 去掉readonly属性,再用js方法 ele.value="XXX" 输入值
# 去掉元素的readonly属性 js = 'document.getElementById("train_date").removeAttribute("readonly");' driver.execute_script(js) # 用js方法输入日期 js_value = 'document.getElementById("train_date").value="2016-12-25"' driver.execute_script(js_value)
9. Web端功能自动化中,如何切换句柄
1). 获得当前所有窗口的句柄:handles = driver.window_handles
2). 获得当前窗口的句柄:driver.current_window_handle
2). 切换到最新打开的窗口:driver.switch_to.window(handles[-1])
3). 切换到第一个窗口:driver.switch_to.window(handles[0])
10. Web端功能自动化中,使用Unittest框架,测试用例的命名有哪些规则?如何控制测试用例执行顺序
测试类一般以Test开头,测试用例一般以test开头
测试用例是按照字母a-z,数字0-9的顺序来执行,可以通过给测试用例函数添加数字或字母来控制测试用例的执行顺序