设计思路
本文整理归纳以往的工作中用到的东西,现汇总成基础测试框架提供分享。
框架采用python3 + selenium3 + PO + yaml + ddt + unittest等技术编写成基础测试框架,能适应日常测试工作需要。
1、使用Page Object模式将页面定位和业务操作分开,分离测试对象(元素对象)和测试脚本(用例脚本),一个页面建一个对象类,提高用例的可维护性;
2、使用yaml管理页面控件元素数据和测试用例数据。例如元素ID等发生变化时,不需要去修改测试代码,只需要在对应的页面元素yaml文件中修改即可;
3、分模块管理,互不影响,随时组装,即拿即用。
测试框架分层设计
把常见的操作和查找封装成基础类,不管是什么产品,可直接拿来复用
业务层主要是封装对象页面类,一个页面建一个类,业务层页面继承基础层
用例层针对产品页面功能进行构造摸拟执行测试
框架层提供基础组件,支撑整个流程执行及功能扩展,给用例层提供各页面的元素数据、用例测试数据,测试报告输出等
测试框架目录结构
如下思维导图目录结构介绍:
编写用例方法
login.yaml
例如,我们要新增登录功能测试用例:
首先,只需在testyaml目录下新增一个页面对象yaml文件,参考login.yaml格式编写即可。这些文件是提供给封装页面对象类调用并执行定位识别操作。
login_data.yaml
其次,在testdata目录下新增一个login_data.yaml文件提供给登录接口传参的测试数据,编写格式参考login_data.yaml文件。
loginPage.py
然后,在page_obj目录下新增一个loginPage.py文件,是用来封装登录页面对象类,执行登录测试流程操作。
login_sta.py
最后,在testcase目录下创建测试用例文件login_sta.py,采用ddt数据驱动读取yaml测试数据文件
综上所述,编写用例方法只需要按以上四个步骤创建->编写即可。
执行如下主程序,可看输出的实际结果。
common
包含:基本的公共方法类,比如HTML报告、Log处理、发送邮件、基本页面对象等
其中pageObject里面是对各个测试系统操作页面的一个封装,以后用例的方法直接继承即可。可多次调用,维护起来比较方便。
conf
基本的系统参数配置信息,可以包含url,正确用户的信息,简单日志级别,某些输出位置,邮件信息等
data
对于数据驱动或者其他测试用例中需要测试的数据,之后测试用例流程不变,可以直接在文档中进行Axitrader返佣https://www.kaifx.cn/broker/a...。暂时采用excel。也可以采用csv,xml等等方法
log
日志输出,暂时包括了 log输出,htmlreport输出以及img的保存。
test
其中包含testcase以及testsuite两个模块
testcase 负责编写测试用例如果某个功能有多个py文件编写可以再新建一个目录。
testsuite 就是测试套件,可以按需求进行选择需要的测试项(包含测试用例以及测试类)
注意:使用ddt则不可以再使用addTest方式单独添加测试用例了。
(1)首先导入 webdriver 与 Keys 模块。selenium.webdriver 模块包含驱动浏览器的实现方法。 支持Firefox、Chrome、IE 浏览器。 Keys 模块包含键盘中的键,诸如F1,ALT 等。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
(2)接下来,创建 Chrome WebDriver 实例。
driver = webdriver.Chrome()
driver.get 方法会在浏览器中打开指定的 URL 页面。 当页面完全加载后(会触发 “onload” 事件),才会把控制权交给我们写的测试脚本。
注意: 如果如果加载的页面,使用了很多 AJAX 请求,那么 WebDriver 可能不知道完全加载的时间点。
(3)然后是一个断言,测试网页标题(即 H5 中的 <title> 标签)中是否包含 “Python” 字符串:
assert 'Python' in driver.title
(4) WebDriver 提供了多种查找元素的方法,形如 使用 find_element_by_*。 例如,这里使用了 find_element_by_name 方法通过其标签的 name 属性,来查找输入框元素 。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。