python3+Robot Framework+PyCharm自动化测试框架设计,,关于自动化测试框架的


关于自动化测试框架的设计,笔者在前面的随笔里面有介绍和总结,这里结合实际的项目例子做个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期望结果

技术分享图片

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

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

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

testcase:测试用例脚本。

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

keywords-》登录关键字.txt

*** Settings ***Library  Selenium2Library*** Keywords ***登录系统    [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    sleep    2    ${page_title}    get title    run keyword if    ‘${page_title}‘ == ‘我的地盘 - 禅道‘    return from keyword    true    ...    ELSE    return from keyword    flase退出系统    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}‘ == ‘0‘    return from keyword    ${queryResults}    ...    ELSE    return from keyword    ‘跳过该用例‘

actionwords-》登录操作.txt

*** Settings ***Resource  ../keywords/登录关键字.txtResource  ../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]}    ${actual_result}    登录系统    ${test_url}    ${account}    ${passwd}    ${browser}    should be equal    ${actual_result}    ${excepted}    登录${account}失败    ${actual_result1}    退出系统    should be equal    ${actual_result1}    ${excepted}    退出${account}失败

testcase-》登录禅道.txt

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

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

最后的执行完成后的测试报告效果:技术分享图片

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

评论关闭