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

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

1、针对项目特色肯定选用的开源的测试框架,这里由于要作WEB UI自动化,选择robot framework +selenium2library+databaselibrary,例外一些辅助的第三方库,PyMySQL等等,其余的在作项目遇到现有的库解决不了的状况下,再去想办法,包括本身在robot framework的框架基础上面开发第三方库。python

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

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

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

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

actionwords:业务关键字,封装的好能够减小testcese的代码量。数据库

testcase:测试用例脚本。api

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

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}' == '0'    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中新增测试数据,测试用例脚本直接调用业务关键字+测试用例编号,脚本易读性很是的好。

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

 

相关文章
相关标签/搜索