一位Php开发成功转行测试的经历 (含面试题和答案) 上上文聊到朋友最近遇到的面试题,下篇主要介绍自动化相关的面试题,对优化简历过程感兴趣的同学可观看模拟测试之手把手教你如何润色简历视频。
模拟面试背景
先简单聊聊这位朋友的背景,5年左右的php开发经验,专业是信息管理与信息系统,统招本科学历。
目前php语言已经江河日下,市场占有率很低,也不想学习新的开发语言,想找个测试岗位躺平,因为没有测试经验,所以想让我给他做面试辅导。
全流程包括模拟面试+个性化包装简历+面试问题回答等,前后将近5小时左右。目前这位朋友在武汉已经拿到一家14k的offer。
截图和文章内容已征求当事人同意发布。
面试题分享
这位小伙伴面试很多家,也记录了大部分的面试题,已挑选出经典常见的面试题,并给出对应的答案,想要获取更多面试题,关注公众号 “特斯汀软件测试”
自动化
1、说一说你们自动化框架的层级,有参与你们自动化框架的搭建吗,为什么用这样的层级划分?
答:ui自动化,基本上都是po模式,主要分为分为四层:基础层、对象层、操作层、用例层,每一层负责各自的功能,这样有益于提高代码的可读性,复用性和扩展性。”
接口自动化:
1)代码运行层:run_test.py作用:代码的入口,运行代码,收集测试用例,生成测试报告。
2)测试逻辑层:test_case包,各个模块的测试用例方法,便于管理,便于维护。
3)数据管理层:data,excel数据,csv数据,yaml数据、ini数据,数据列表的保存。
3)业务逻辑层:common 通用(request_handler,excel_handler,yaml_handler,logger_handler,sql_handler),通用的,*logger日志的操作封装,数据库操作的封装,yaml操作的封装,excel操作的封装。
4)配置文件:config 和项目相关联的,项目地址,数据库地址,logger级别。
5)测试报告(输出)report
2、多线程执行用例脚本怎么共享数据?
答:其实就是想考察保障线程安全的方式,java中可以加锁,或使用threadlocal 每个线程复制一份数据,各玩各的,互不干扰。
3、你的接口自动化是怎么实现的,实现了哪些模块,解决了哪些问题?
答:老八股文了,具体可以参考接口自动化相关面试题
4、你的测试数据怎么管理的,有什么字段?
答:大部分都放在Excel里进行数据驱动,普通情况下有以下字段如截图,具体也要结合自己的项目去说。
5、你在自动化过程中遇到的最大的问题是什么?
答:老八股文了,具体可以参考接口自动化相关面试题
6、requests调用HTTPS接口需要配置什么?
当我们访问 HTTPS 的网站时,需要进行证书验证,在浏览器中可以自动处理验证问题,在 python 总共有以下两种做法:
import requests //不进行证书验证,但这种方式会出现警告,如下图
req = requests.get("https://www.12306.cn/", verify=False) print(req.status_code)
import requests //直接指定证书进行验证
req = requests.get("https://www.12306.cn/", cert=('/path/server.crt', '/path/key'))
print(req.status_code)
7、为什么用yaml文件管理测试数据?
答:如果只是简单用例执行,数量较小,使用yaml,简单高效,对于大量的数据,建议使用excel。
8、你封装过哪些方法,举例说明,除了这些常用的,还有没有你们针对你们项目中特别进行封装的一些方法,举例说明
答:譬如接口请求接口方法封装,断言结果封装、接口header中获取token封装等等。
9、你的ui自动化实现了哪些模块?
答:一般都是实现项目的主流程,
10、unittest你用过哪些东西?
答:TestFixture(脚手架,做一些启动关闭的清理程序)、TestCase(python中方法)、TestSuite(套件)、TestRunner
11、pytest里面你怎么实现数据驱动的?
答:我们以yaml为例
1)编写测试用例放入yaml中
#用例1
-
interfaceName: 首屏-考试数据接口
url: http://stupad-stre****
headers: {
'Content-Type': 'application/json',
'requestid': '021618985865',
'token': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOiI4OTg2MyIsInN5c3RlbUlkIjoiODE5NTEwNTU3NDEiLCJvcmdJZCI6IjgwIiwidGltZXN0YW1wIjoiMTYxODk4NTcwODkyOCJ9.rTSoq0rwvCcHNLXiwKCa76_Vw_i926BuMoFrl1Tv0Q0'
}
data: {
"type": 1
}
2)创建工具类读取yaml
import yaml
class yamlUtil():
def __init__(self,yaml_file):
'''
通过init把文件传入到这个类
:param yaml_file:
'''
self.yaml_file = yaml_file
#读取ymal文件
def read_yaml(self):
'''
读取yaml,将yaml反序列化,就是把我们yaml格式转换成dict格式
:return:
'''
with open(self.yaml_file,encoding="utf-8") as f:
value = yaml.load(f,Loader=yaml.FullLoader) #文件流,加载方式
print(value)
if __name__ == '__main__':
yamlUtil("./interface.yaml").read_yaml()
3)使用注解
#通过@pytest.mark.parametrize()实现yaml的数据驱动
import pytest
import os
from common.yaml_util import yamlUtil
class Test_yaml():
@pytest.mark.parametrize("args",yamlUtil(os.getcwd()+"/testcase/test_yaml/interface.yaml").read_yaml())
def test_yaml(self,args):
# print(args)
interfaceName = args['interfaceName']
url = args["url"]
headers = args["headers"]
assert 2 == args["data"]["type"]
12、会对哪些内容进行断言
答:接口出参code,msg或一些落库数据断言;
13、ui自动化中元素无法定位到是因为什么?
1). 代码写错
2). 元素未出现(需要元素等待)
3). 元素在iframe中
4). 多窗口
5). 出现弹窗(系统弹窗、JS弹窗)
6). 元素属性值是动态加载的
7). 元素无法确定唯一性
8). 只读属性(元素不可操作)
14、怎么解决接口之间的数据依赖?token这种呢?
答:对于单接口测试如果依赖接口只需要在测试开始执行一次,那么可以将依赖接口的请求放在类级前置方法中,然后通过全局变量或者当前用例类属性来传递依赖数据。
对于单接口测试如果依赖接口需要在每个用例前执行,那么可以将依赖接口的请求放在方法级前置方法中,然后通过用例对象属性来传递依赖数据对于多接口的业务流测试,可以将下一个接口需要依赖的数据通过当前用例类属性来传递依赖数据。
15、如果接口有重定向怎么处理的
答:一般重定向接口都有个location
代码示例:获取location ,可以自己去重新请求获取的location。
# coding:utf-8
import requests
# 请求头
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
}
s = requests.session()
# 打开我的随笔
r = s.get('https://i.cnblogs.com/EditPosts.aspx?opt=1',
headers=headers,
allow_redirects=False,
verify=False)
# 打印状态码,自动处理重定向请求
print (r.status_code)
new_url = r.headers["Location"]
print (new_url)
最后,关于软件测试学习,offer选择等等,都可以通过后台私信交流。需要学习资料或者帮忙修改简历也可以私信!!也可百度搜索“特斯汀软件测试腾讯课堂”或关注公众号“特斯汀软件测试”,里面涵盖很多精彩免费视频或干货知识
如若转载,请注明出处:https://www.daxuejiayuan.com/4821.html