python自动化框架pycharm_python3+Robot Framework+PyCharm自动化测试框架设计

关于自动化测试框架的设计,笔者在前面的随笔里面有介绍和总结,这里结合实际的项目例子做个demo,环境部署参考笔者的的随笔《

一、针对项目特点确定选用的开源的测试框架,这里因为要做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 elementis 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 keywordif '${page_title}' == '我的地盘 - 禅道' return fromkeyword true

... ELSEreturn fromkeyword flase

登录系统失败

[Arguments] ${url} ${account}=admin ${passwd}=Aa123456 ${browser}=chrome

[Documentation] url:请求地址

... account:账号

... passwd:密码

... browser:测试浏览器

open browser ${url} ${browser}

maximize browser window

wait until elementis 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 elementis visible id=account

${page_title} get title

close all browsers

run keywordif '${page_title}' == '用户登录 - 禅道' return fromkeyword true

... ELSEreturn 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 keywordif '${flag}' == '0' return fromkeyword ${queryResults}

... ELSEreturn 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 keywordif '${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 keywordif '${excepted}' == 'true'登录系统成功 ${test_url} ${account} ${passwd} ${browser} ${expAcc}

... ELSE 登录系统失败 ${test_url} ${account} ${passwd} ${browser}

run keywordif '${actual_result}' == 'true' 退出系统

testcase-》登录禅道.txt

*** Settings ***Resource ../actionWords/登录操作.txt*** Test Cases ***登录管理员账户admin

登录测试1登录测试主管账号xiajie

登录测试2登录测试主管账号xiajie,不输入密码,登录失败

登录测试3登录测试主管账号xiajie,密码错误(数据库设置的跳过)

登录测试4

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

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

你可能感兴趣的:(python自动化框架pycharm_python3+Robot Framework+PyCharm自动化测试框架设计)