关于自动化测试框架的设计,笔者在前面的随笔里面有介绍和总结,这里结合实际的项目例子做个demo,环境部署参考笔者的的随笔《python3+Robot Framework+PyCharm环境部署及执行脚本》,拿开源的项目管理平台禅道为例。

一、针对项目特点确定选用的开源的测试框架,这里因为要做WEB UI自动化,选择robot framework +selenium2library+databaselibrary,例外一些辅助的第三方库,PyMySQL等等,其他的在做项目遇到现有的库解决不了的情况下,再去想办法,包括自己在robot framework的框架基础上面开发第三方库。

二、分析项目的测试模块,设计数据库表,因为笔者打算把测试用例数据放在MySQL数据库管理。这里以登录功能为例,笔者的是设计的数据库表t_login如下所示:

id 主键,不为null 测试用例编号
flag 不为null 缺省0,0表示执行,1表示不执行
account    
passwd    
expected 不为null 期望结果
expEx1   期望结果扩展字段

三、笔者把目录分为3块,keywords,actionwords,testcase。

keywords:颗粒度最小的关键字单元。

actionwords:业务关键字,封装的好可以减少testcese的代码量。

testcase:测试用例脚本。

下面直接上代码,结构一目了然

keywords-》登录关键字.txt

*** Settings ***
Library Selenium2Library *** Keywords ***
登录系统成功
[Arguments] ${url} ${account}=admin ${passwd}=Aa123456 ${browser}=chrome ${expAcc}=admin
[Documentation] url:请求地址
... account:账号
... passwd:密码
... browser:测试浏览器
... expAcc:校验参数
open browser ${url} ${browser}
maximize browser window
wait until element is visible id=account
input text id=account ${account}
input text name=password ${passwd}
click button id=submit
wait until page contains ${expAcc}
${page_title} get title
run keyword if '${page_title}' == '我的地盘 - 禅道' return from keyword true
... ELSE return from keyword flase 登录系统失败
[Arguments] ${url} ${account}=admin ${passwd}=Aa123456 ${browser}=chrome
[Documentation] url:请求地址
... account:账号
... passwd:密码
... browser:测试浏览器
open browser ${url} ${browser}
maximize browser window
wait until element is visible id=account
input text id=account ${account}
input text name=password ${passwd}
click button id=submit
alert should be present text=登录失败,请检查您的用户名或密码是否填写正确。 timeout=2
${page_title} get title
should be equal ${page_title} 用户登录 - 禅道
close all browsers 退出系统
click element xpath=//*[@class='user-name']
click element xpath=//a[contains(text(),'退出')]
wait until element is visible id=account
${page_title} get title
close all browsers
run keyword if '${page_title}' == '用户登录 - 禅道' return from keyword true
... ELSE return from keyword flase

keywords-》MySQL读取测试数据.txt

*** Settings ***
Library DatabaseLibrary *** Variables ***
${dbapiModuleName} pymysql
${db_connect_string} database='test', user='root', password='root', host='127.0.0.1', port=3306 *** Keywords ***
登录MySQL读取测试用例
[Arguments] ${tableName} ${caseId}
[Documentation] dbapiModuleName:mysql数据库驱动的名称
... db_connect_string:MySQL数据库连接信息
... tableName:数据库表名
... caseId:测试用例编号
Connect To Database Using Custom Params ${dbapiModuleName} ${db_connect_string}
@{queryResults} Query SELECT * FROM ${tableName} where id = ${caseId}
log many @{queryResults}
${flag} set variable ${queryResults[0][1]}
run keyword if '${flag}' == '' return from keyword ${queryResults}
... ELSE return from keyword '跳过该用例'

actionwords-》登录操作.txt

*** Settings ***
Resource ../keywords/登录关键字.txt
Resource ../keywords/MySQL读取测试数据.txt *** Variables ***
${test_url} http://127.0.0.1/zentao/user-login.html
${browser} chrome *** Keywords ***
登录测试
[Arguments] ${caseId}
${testcase} 登录MySQL读取测试用例 t_login ${caseId}
${bool} evaluate isinstance(${testcase}, str)
run keyword if '${bool}' == 'True' pass execution if ${testcase} == '跳过该用例' ${testcase}
${account} set variable ${testcase[0][2]}
${passwd} set variable ${testcase[0][3]}
${excepted} set variable ${testcase[0][4]}
${expAcc} set variable ${testcase[0][5]}
${actual_result} run keyword if '${excepted}' == 'true' 登录系统成功 ${test_url} ${account} ${passwd} ${browser} ${expAcc}
... ELSE 登录系统失败 ${test_url} ${account} ${passwd} ${browser}
run keyword if '${actual_result}' == 'true' 退出系统

testcase-》登录禅道.txt

*** Settings ***
Resource ../actionWords/登录操作.txt *** Test Cases ***
登录管理员账户admin
登录测试 1 登录测试主管账号xiajie
登录测试 2 登录测试主管账号xiajie,不输入密码,登录失败
登录测试 3 登录测试主管账号xiajie,密码错误(数据库设置的跳过)
登录测试 4

实际上,写测试用例就很轻松了,结合robot framework的关键字驱动,引入MySQL做持久层数据管理,实现数据驱动测试,直接在MySQL中新增测试数据,测试用例脚本直接调用业务关键字+测试用例编号,脚本易读性非常的好。

最后的执行完成后的测试报告效果:

python3+Robot Framework+PyCharm自动化测试框架设计的更多相关文章

  1. python3+Robot Framework+PyCharm环境部署及执行脚本

    Robot Framework是一个非常优秀的开源关键字驱动自动化测试框架,目前已经支持python2和python3,但是GUI界面RIDE只支持python2,但是python的未来是python ...

  2. python3+Robot Framework+PyCharm第一个WEB UI自动化用例

    这里只是列举一个很简单的例子,简单介绍工具的使用,编写用例之前,做好WEB UI自动化的准备工作,下载好chrome驱动(这里以chrome为例,不同浏览器有对应的驱动),注意驱动和浏览器版本要对应, ...

  3. Python3简易接口自动化测试框架设计与实现(中)

    目录 7.Excel数据读取 7.1.读取配置文件 7.1.编写Excel操作类 8.用例组装 9.用例运行结果校验 10.运行用例 11 .小结 上一篇:Python3简易接口自动化测试框架设计与实 ...

  4. 《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)

    1.简介 上一篇宏哥介绍了如何设计支持不同浏览器测试,宏哥的方法就是通过来切换配置文件设置的浏览器名称的值,来确定启动什么浏览器进行脚本测试.宏哥将这个叫做浏览器引擎类.这个类负责获取浏览器类型和启动 ...

  5. Python3简易接口自动化测试框架设计与实现(上)

    目录 1.开发环境 2.用到的模块 3.框架设计 3.1.流程 3.2.项目结构 5.日志打印 6.接口请求类封装 接口开发请参考:使用Django开发简单接口:文章增删改查 1.开发环境 操作系统: ...

  6. 【架构研习】欲善其事先利其器-Robot Framework实战演练之框架的选择

    (原创文章,转载请注明出处.) 之前有提到过,自己曾基于公司业务系统从无到有码过一套测试框架,但由于开发时的思想同时受限于公司业务及框架的适用性上,导致最终虽然框架可完美支持业务,但在易用性.兼容性及 ...

  7. Automation Framework Design 自动化框架设计思想

    从2007年到2017年,十年内自动化测试工具层出不穷,各种工具在运用一段时间之后,各个公司都会有测试架构师对于目前的自动化测试工具进行框架定制设计. 从惠普2007年GDCC推出的的WebDrivi ...

  8. Python3+Robot Framework+RIDE安装使用教程

    一.说明 Python3----网上很多文章都是用Python2,Robot Framework的部分文档没更新也直接写着不支持Python3(如RIDE does not yet support P ...

  9. python+robot framework接口自动化测试

    python+requests实现接口的请求前篇已经介绍,还有不懂或者疑问的可以访问 python+request接口自动化框架 目前我们需要考虑的是如何实现关键字驱动实现接口自动化输出,通过关键字的 ...

随机推荐

  1. JS前端无侵入实现防止重复提交请求技术

    JS前端无侵入实现防止重复提交请求技术 最近在代码发布测试的过程中,我发现有些请求非常的消耗服务器资源,而系统测试人员因为响应太慢而不停的点击请求.我是很看不惯系统存在不顺眼的问题,做事喜欢精益求精, ...

  2. python3.7安装pylint

    python3.7安装pylint之"setuptools"版本错误 借鉴:错题集(已解决):pyinstaller报错ModuleNotFoundError: No module ...

  3. pre的内容自动转行

    使pre的内容自动换行(转) <pre> 元素可定义预格式化的文本.被包围在 pre 元素中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. <pre> 标签的一个常见 ...

  4. GetFontResourceInfo 函数: 获取字体文件对应的字体名

    在 win 7, gdi32.dll,找不到 GetFontResourceInfo(), 但能找到 GetFontResourceInfoW(), 用法类似. //----------------- ...

  5. 在不同DPI屏幕环境下,让图标显示的尺寸保持不变,使用 LoadImage() 加载图标

    之前写过的一个客户端程序中,需要在状态栏上显示图标: 我当时使用的是:HICON LoadIcon(HINSTANCE hInstance, LPCTSTR lpIconName); 在DPI:125 ...

  6. 简单的makefile

    单一程序 准备一个hello.c #include <stdio.h> int main(void) { printf("Hello World!\n"); } gcc ...

  7. jQuery 为动态添加的元素绑定事件

    在使用jquery的方式为元素绑定事件时,我经常使用bind或者click,但这只能为页面已经加载好的元素绑定事件.像需要用ajax的方式请求远程数据来动态添加页面元素时,显然以上几种绑定事件的方式是 ...

  8. Exp3 免杀原理与实践

    一.实验过程 1.编码器 (1)使用msf编码器,直接生成meterpreter可执行文件(跟Exp2中生成backdoor.exe的过程一样,生成后门文件),送到Virscan.VirusTotal ...

  9. [Android] Android 最全 Intent 传递数据姿势

    我们都是用过 Intent,用它来在组件之间传递数据,所以说 Intent 是组件之间通信的使者,一般情况下,我们传递的都是一些比较简单的数据,并且都是基本的数据类型,写法也比较简单,今天我在这里说的 ...

  10. ThinkPHP—URL的访问以及各种方法的操作

    1.URL访问 ThinkPHP采用单一入口模式访问应用,对应用的所有请求都定向到应用的入口文件,系统会从URL参数中解析当前请求的模块.控制器和操作,下面是一个标准的URL访问格式: 第一种访问方式 ...