1、你做了几年的测试、自动化测试,说一下 selenium 的原理是什么?
我做了五年的测试,1年的自动化测试;
selenium 它是用 http 协议来连接 webdriver ,客户端可以使用 Java 或者 Python 各种编程语言来实现;
2、什么项目适合做自动化测试?
关键字:不变的、重复的、规范的。
第一点,需求变化不能太频繁;
第二点,项目周期要足够长,如果自动化代码还没有写完,公司就倒闭了,那也不需要自动化了
第三点,脚本可以重复使用:在一些典型的场景,比如说 “冒烟测试、回归测试” 的地方就是经常使用自动化测试;
第四点,被测试的软件是否规范:比如说是不是有需求文档、规范的接口文档、是否有原型图、你的接口设计是不是比较规范;
第五点,手工测试是无法完成的;比如说一个性能测试,不能同时有 一千只手一直做好点点点,自动化测试的成本不是特别高。
3、Python 生成器 和迭代器的区别?
作为迭代器必须实现两个特定的方法 “iter(),next()” ;
生成器是一种特许的迭代器,支持所有的迭代操作,除此之外生成器还实现了,普通迭代器没有的一些特性;
比如说它可以通过 send 的方法与生成器内部进行数据交互;还有它可以通过 close 方法去进行关闭;甚至还可以通过 throw 方法,引发内部的异常;
4、为什么用 Mac 写代码?
表面原因是 Mac 方便易用,颜值也高;深层原因是因为现在的服务器,大多都是采用 Linux 系统,而 Mac 系统 和 Linux 系统其实都是基于原来的 Unix 系统开发的;
而 Mac 基本上能够维持我们的开发环境和线上的一致性;
为什么不用 Linux ?
用 Linux 写代码也是一个很好的选择,但是 Linux 的界面操作和他的娱乐功能不是特别强,而 Mac 做到了很好的平衡;
5、你是怎么开展自动化测试工作的?
第一,根据产品的业务特性整理出来,可以做自动化的一个功能模板;
第二,我们会根据有限级以及人员现状,来制定自动化测试计划;
第三,我们会从功能用例当中挑选合适的用例来转成自动化用例;
第四,是框架选型,选择编制语言或者工具来实现,我们的团队都是会代码的能力还不错,所以我们选择的是 Python 语言来实现的;
第五,就是自动化测试的脚本开发;
第六,根据项目来制定自动化的执行方案;
第七,就是测试报告的分析工作,以及 自动化测试成果的汇报,跟进后期的维护;
6、请说下什么是闭包函数?
完成的闭包必须包含以下三个特性:函数中必须嵌套一个函数;外层函数返回值是内层函数的函数名;内存嵌套函数对外层作用率,有非全局变量的引用;
简单来说闭包函数,第二个返回的不仅仅是一个简单的函数,这个函数它还呆了一个封闭的作用域;
7、请介绍一下你的自动化测试框架?
在上家公司搭建了 API 接口自动化测试框架,使用 Python 中的 unittest 框架结合 requests 模块,采用数据驱动思想(ddt)和分层设计理念,实现测试用例自动化执行;
我的框架主要分为一下几大模块:
模块一:cases(K色死)文件夹,自己根据接口需求封装的模块(注册,登录,充值),保存测试用例的类
模块二:configs(康菲格斯)文件夹,配置文件,存放项目当中共有配置:文件名、日志器,数据库,url地址
模块三:datas(得塔斯):保存测试用例 Excel 文档数据;
往往一条测试用例的自动化代码都是一样的,只不过只是数据不同而已,会将数据和代码分离,使用 ddt 进行驱动,这分离就是数据驱动思想;
会将一条测试用例的数据放到 Excel 、数据库中,一条数据代表一条用例,这样可以精简代码,方便维护
模块四:libs(来波斯)文件夹,第三方库文件夹、ddt 和 HTML 报告;
ddt:修改 ddt 库,如果数据是字典,则获取字典当中的 title 对应的值,加到测试用例名称中;HTML 报告,使用更加美化详细的报告
模块五:logs(老格斯)文件夹,存放日志文件;
模块六:reports(瑞跑次)文件夹,存放生成的报告
模块七:scripts(思怪珀斯)文件夹,存放封装的类和模块,封装了通用的工具模块
constants :(康斯ten死)py文件是存储目录路径文件;使用 os 库,存放定位的文件目录 import os
han dle_config.py:(憨豆个.康飞个)文件封装了对配置文件的读写操作;
from configparser import ConfigParser 使用 (康飞个.拍儿涩)方法,进行配置文件的读写
han dle_context.py:(憨豆.康 泰可斯特)py文件是参数化的封装;
使用 re 模块,正则来实现参数化 search (译:涩吃)方法搜索、sub(译:萨博)方法替换操作
han dle_excel.py:(憨豆.一颗赛欧)py 文件是 对Excel 文件的封装;
使用 openpyxl 模块,来处理 excel 文件对,文件进行读写操作, 存储测试数据(用例数据)用例数据);包括:获取所有测试用例、对执行结果在指定行进行写入
第一步. 打开excel文件:使用load_workbook(译:楼的我的不可)传入文件名,默认active 获取第一个表单,否则获取指定的表单
获取表头的信息,使用iter_rows(艾特木肉丝)方法,嵌套元祖的元祖,省略最小行号
zip函数将表头的元祖与每一行用例所在的元祖进行拼接,dict转换为字典后,添加到列表当中one_list = []
han dle_log.py:(憨豆.啷个)py文件是,使用 logging (啷个应)模块,来创建日志器, 记录项目中的日志信息;import logging
1. 定义日志收集器,使用.getLogger方法,收集器的名字case
2. 指定日志收集器的日志等级,使用logging对象中.setLevel方法(赛特。莱欧)
3. 定义日志输出渠道
输出到控制台,使用logging(老根)当中的.StreamHan dler(丝锥木汗都)
输出到文件,使用logging(老根)当中的.FileHan dler(发偶。憨豆)方法,(指定文件名, 默认a以追加的方式,)
4. 指定日志输出渠道的日志等级,使用对象.setLevel(赛特。莱欧)方法
5. 定义日志显示的格式,logging(老根)当中的 Formatter(佛梅特) 函数
6. 对接, 将日志收集器与输出渠道对接,收集器中addHan dler(按得,憨豆)函数
han dle_mysql.py:(憨豆.满色口)py文件是 MySQL 数据库封装;
使用 pymysql 库来连接 mysql 数据库,进行数据库操作的封装;主要是执行sql语句, 进行数据校验;import pymysql
import ran dom (译:软的木),Python中的 ran dom 模块用于生成随机数
1.建立链接,使用 pymysql 库中的 connect(可耐科特)
2.创建游标 cursor(烤色)
3.需要执行 sql 语句
4.执行那条 sql 语句,使用 游标 当中的 execute(埃克斯Q特)
5.手动提交,使用 链接对象当中的 commit(可买次)
6.获取执行结果,使用 游标 当中的 fetchone(翻吃万)
7.关闭链接,释放资源 close(科楼司)
先关游标 cursor.close()
再关闭游标对象 conn.close()
han dle_request.py:(憨豆.瑞快死特)py文件是 requests 请求库的封装;
使用 requests (瑞快死特)库用来向接口发起请求的封装;import requests
han dle_user.py:(憨豆。有责儿)py文件是
使用 上面封装的:数据库操作,requests 接口请求封装、配置文件封装类、来创建 一个用户
run.py:入口文件,收集并执行测试用来
自动识别加载测试用例的方法:discover (译:迪斯卡瓦)方法
先加载测试用例
使用 unittest 中 defaultTestLoader(译:滴fao的.泰斯特.楼泽)中 discover(迪斯卡瓦)方法
第一种,使用 . 代表当前py文件所在的路径,自动加载以 test 开头的 py 文件模块
第二种,使用绝对路径加载,使用 r 进行转码
执行用例
1.需要创建执行器对象,使用 unittest 当中的 TextTestRunner(译:泰斯特.泰斯特.软那儿)
one_runner = unittest.TextTestRunner()
2.运行套件
one_runner.run(one_suite)
能够 web 自动化测试框架,采用 PO 模式和关键字驱动思想,使用 Python 中的 pytest 框架结合 selenium 模块和 allure 插件,实现测试用例自动化执行
8、pytest 和 unittest 的区别?
首先 unittest 是 pytest 官方库,兼容性更好更稳定,pytest 在安装的时候可能会出现和 Python 的版本出现兼容问题;
在 用例编写上面,unittest 当中,用例都是以类的形式编写的,并且都要继承于这个 testcase;
pytest 当中,支持函数 和 类两种形式,并且 pytest 有 conftest.py 这个文件来支持全局的共享前置后置;
在 用例收集上, unittest 当中,要利用 testloader he testsuite 来主动收集和加载用例;pytest 当中,能够自动识别用例;
在 用例分类和筛选上面,unittest 当中,对现有的用例进行一个筛选和处理的话是比较麻烦的;pytest 当中,可以通过打标记来轻松实现用例筛选;
在 运行失败的机制上面,unittest 当中,官方库并没有提供失败重启的机制;pytest 当中,自带的失败重运行机制;
在 运行过程上面,unittest 当中,没有支持的插件;pytest 当中,有 700 多个插件,可以支持的插件非常丰富;
9、列表推导式是什么?
推导式 是 Python 中用来生成数据的一种高级用法,Python 不仅有列表推导时,还有字典推导式、集合推导式、生成器表达式;
它的语法都是一样的,都是通过 for 循环来创建数据的一种简写的方式;
10、什么是 PO 模式?
PO模式:全称:Page Object Model (译:配只.奥播摘可t.毛豆)简称POM,叫做页面对象,针对页面、UI界面;
PO 思想主要来源于 马丁福勒(marktin Flowwer)在 2004年发表的一篇文章最开始他不叫 PO ,而是叫做 window driver ,后来 selenium 沿用了这种思想,所以改成了 PO;
主要用途:是把一个具体的页面转化为编程语言当中的一个对象,页面特性转化成对象属性,页面操作转化为对象方法;
在自动化测试当中,主要用来实现对页面操作和测试逻辑的一个分离;