RobotFrameWork+Pycharm入门笔记
没错我又开始学接口自动化了。。。。。。 我的更新也是看我一阶段学的是啥,对啥感兴趣,随缘更新
(一)两个必须记住的关键字!
1.setup 和 teardown:设置和拆卸
Suite setup,Suite teardown 测试套件设置和拆卸
Test setup,Test teardown 测试用例设置和拆卸
测试设置是在测试用例之前执行的,并且在测试用例之后执行测试拆卸
2.Tags:标签
有Force Tags 和 Default Tags两种:强制标签(具有此设置的测试用例文件中的所有测试用例始终都会获得指定的标记。如果在测试套件初始化文件中使用它,则子测试套件中的所有测试用例都会获得这些标记)和默认标签(没有自己[Tags]设置的测试用例会获得这些标记。从Robot Framework版本2.5开始,测试套件初始化文件中不再支持默认标记)
测试用例总是获得这些标签。此外,它不会获取使用默认标记指定的可能标记,因此可以使用空值覆盖默认标记。设置标签:Set Tags 删除标签关键字:Remove Tags keywords
(二)其他一些关键字
1.常用关键字
Comment:注释 Log:打印 Set Variable:设置变量 Get Time:获得系统时间 Catenate:字符串拼接
2.复杂关键字
create list:创建列表 @{LIST},@开头只能用log many打印 create dictionary:创建字典 ,&{some} a=1 b=2 可以直接打印&{some},也可以打印${some.a},有点类似于java中的复合变量 evaluate:执行python自带的方法
3.常用快捷键
F5 搜索关键字 ctrl+shift+空格 自动补全关键字 注:关键字不区分大小写
(三)变量类型
标量变量:${scalar} 列表变量:@{LIST} Boolean变量:${true/false} Null/None变量:${null/None} 空格:${SPACE} 空:${EMPTY 复合变量:&{some} a=1 b=2 可以直接打印&{some},也可以打印${some.a}
(四)结构
一个文件下来是一个测试用例表格,一个测试用例表格包含四个部分:
1.Settings-设置表:1.导入测试库、资源文件、变量文件 2.为测试套件和测试用例定义元数据
2.Variables-变量表:定义变量
3.Test Cases-测试用例表:创建测试用例,结构如下:
[Documentation] 用于指明当前测试用例文档(自己命名)。 [Tags] 用于标记测试用例。 [Test Setup],[Test Teardown] 指定测试用例设置和拆卸。 [Template] 指定要使用的模板关键字。测试本身将仅包含用作该关键字的参数的数据。 [Timeout] 用于设置测试用例超时。
4.Keywords-关键字表:从现有的较低级别关键字创建用户关键字
5.新增Common结构:下面有三个子目录:DataBase(放了各个项目所有需要用到的数据库连接参数)、SetUp(用来设置参数)、URL(各个项目用到的接口地址)首先,需要将Setup.robot这个resource导入到每个套件中,然后在SuiteSetUp中使用AllSettingSetUp这个关键字。然后,对照”设置测试环境链接参数“中的变量名,更改脚本中需要用的的变量。
(五)Pycharm连接数据库操作
Connect To Database Using Custom Params pymysql
db=“数据库名称”,user=“用户名”,password=“密码”,host=“localhost(主机号)”,port=3306(端口号)
执行sql语句:Execute Sql String(也可Query代替) 关键字用于断开与数据库的连接:Disconnect From Database
(六)接口自动化
测试用例表结构:
Create Session:创建一个与服务器的会话。 alias:当前会话的别名 url:服务器地址,基本地址(主地址),而不是接口的地址
Post Request:发送一个Post请求,并返回一个响应对象。 alias:选择一个会话的别名,来自于Creste Session关键字 uri:接口地址,不包含服务器地址 data:post请求体数据 返回值:response对象(requests库的response对象)
Get Request:发送一个get请求,并返回一个响应对象。 alias:选择一个会话的别名,来自于Creste Session关键字 uri:接口地址,不包含服务器地址 params:post请求体数据 返回值:response对象(requests库的response对象)
To Json: 把响应数据json字符串转换成字典对象。
Response对象:status_code:当前http通信的状态吗 text:响应数据的响应数据部分-字符串 json():转换成json对象
Should Be Equal As Strings:以整数的形式进行比较,是一个断言
步骤:
1.建立连接:调用Create Session关键字,创建与服务器的连接 2.准备请求数据:使用Cteate Dictorary关键字创建键值对的请求数据等 3.发送请求并接收响应结果:
r
e
s
p
接
收
响
应
结
果
4.
获
取
响
应
的
数
据
:
{resp}接收响应结果 4.获取响应的数据:
resp接收响应结果4.获取响应的数据:{resp.text} 获取请求的状态:${resp.status_code}
示例:数据库增删改查操作
*** Settings ***
Library DatabaseLibrary
Library RequestsLibrary
*** Test Cases ***
fiest
Connect To Database Using Custom Params pymysql db="drug_store",user="root",password="root20",host="localhost",port=3306,use_unicode=True,charset="utf8"
${select} Query SELECT * FROM ds_user
log ${select}
Disconnect From Database
添加用户
&{header}= Create Dictionary Content-type=application/json
Create Session AddCate http://localhost:8088/project_1006 headers=${header}
set test variable ${data} {"category_name":"类别12","sort":6}
${resp} POST On Session AddCate addcate data=${data}
log ${resp.status_code}
log ${resp.text}
Should Be Equal As Numbers 200 ${resp.status_code}
查询用户
&{header}= Create Dictionary Content-type=application/x-www-form-urlencoded
Create Session GetCate http://localhost:8088/project_1006 headers=${header}
${resp} GET On Session GetCate getcate
log ${resp.status_code}
log ${resp.text}
Should Be Equal As Numbers 200 ${resp.status_code}
Should Contain ${resp.text} 类别7
修改用户
&{header}= Create Dictionary Content-type=application/json
Create Session UpdateCate http://localhost:8088/project_1006 headers=${header}
set test variable ${data} {"id":12,"category_name":"cate11","sort":5}
${resp} POST On Session UpdateCate updatecate data=${data}
log ${resp.status_code}
log ${resp.text}
Should Be Equal As Numbers 200 ${resp.status_code}
删除用户
&{header}= Create Dictionary Content-type=application/x-www-form-urlencoded
Create Session DeleteCate http://localhost:8088/project_1006 headers=${header}
&{data}= Create Dictionary id=11
${resp} POST On Session DeleteCate deletecatebyid/11 data=${data}
log ${resp.status_code}
log ${resp.text}
Should Be Equal As Numbers 200 ${resp.status_code}
(七)补充
循环::FOR … IN RANGE … … END 跳出循环:Exit For Loop if判断:run keyword if … ELSE IF … ELSE
|