api课堂笔记_day09&day10

  1 # 正则表达式
  2 improt re
  3 
  4 # re相关的文章&regular表达式学习手册
  5 1、https://www.cnblogs.com/Simple-Small/p/9150947.html
  6 2、https://tool.oschina.net/uploads/apidocs/jquery/regexp.html
  7 3、https://gitee.com/thinkyoung/learn_regex
  8 
  9 # 操作对象-字符串
 10 1、从字符串当中,提取匹配的内容
 11 re 模块
 12 re.findall --返回的是列表 列表里是匹配的所有字符
 13 # 1、匹配1个字符
 14 .除换行符以外的是所有字符 \n
 15 \d 只匹配数字0-9
 16 \D 匹配非数字
 17 \w 匹配包括下划线的任何单词字符,等价于"[A-Z,a-z,0-9]",支持中文
 18 \W 匹配任何非单词字符 等价于“[^A-Za-z0-9]”
 19 [a-z] 匹配小写字母
 20 [A-Z] 匹配大写字母
 21 [0-9] 匹配数字
 22 [adcd] 字符集合 匹配所包含的任意一个字符,例如“[abc]” 可以匹配plain的"a"
 23 [a|b] 匹配x或y 例如 "z|food"能匹配"z"或者"food","(z|f)ood"则匹配“zood”或“food”
 24 # 2、数量匹配
 25 * 匹配前一个字符,0次或多次
 26 + 匹配前一个字符,1次或者多次
 27 ?匹配前有个字符,0次或1次
 28 {n} 匹配前一个字符n次
 29 {n,m} 匹配前一个字符少是n次,最多是m次
 30 {n,} 匹配前一个字符至少是n次,没有下限
 31 贪婪模式:
 32 尽可能的匹配更多更长,对于人民币一样,希望越多越好
 33 非贪婪模式:尽可能的匹配更少,在数量表达后面加上 对于无偿的加班时间,越少越好
 34 
 35 # 边界匹配:
 36 ^ 匹配输入字符串的开始位置
 37 $ 匹配输入字符串的结束位置
 38 
 39 # 匹配分组()
 40 
 41 期望结果与实际结果比对:
 42 import ast
 43 import jsonpath
 44 # 从excel当中,读取出来的断言列表
 45 check_str = '[{"expr":"$.code","expected":0,"type":"eq"},{"expr":"$.msg","expected":"OK","type":"eq"}]'
 46 
 47 # 把字符串转换成python列表
 48 check_list = ast.literal_eval(check_str)  # 比eval安全一点。转成列表。
 49 print(check_list)
 50 
 51 # 比对结果列表
 52 check_res = []
 53 
 54 for check in check_list:
 55     # 通过jsonpath表达式,从响应结果当中拿到了实际结果
 56     actual = jsonpath.jsonpath(response, check["expr"])
 57     if isinstance(actual,list):
 58         actual = actual[0]
 59     # 与实际结果做比对
 60     if check["type"] == "eq":
 61         check_res.append(actual == check["expected"])
 62 # eval用法
 63 strr = """
 64 [{"expr":"$.code","expected":0,"type":"eq"},
 65 {"expr":"$.msg","expected":"OK","type":"eq"},
 66 {"expr":"$..leave_amount","expected":2000.55+2000,"type":"eq"}
 67 ]
 68 """
 69 
 70 res = eval(strr)
 71 print(res)
 72 
 73 # 充值接口:
 74 校验 :登录成功(意味要鉴权)
 75 步骤:充值
 76 断言:校验金额是否正确
 77 后置:私放资源/清理数据
 78 1、类级别地的前置 -- 所有的充值用例,只需要登陆一次就够了。
 79    登陆帐号: 
 80        1、用固定的一个帐号 - 配置化(Conf目录下,data.ini里配置用户)
 81        2、已配置的帐号,如何保证它是已经存在的??
 82           用之前,查一下数据库,如果没有,就注册(session前置)。
 83 
 84        
 85 2、接口关联处理 -- 登陆接口的返回值,要提取出来,然后作为充值接口的请求参数
 86 
 87 准备知识 :re正则表达式、 postman是如何处理参数传递(接口关联的)。
 88 """
 89 类对象设置动态属性
 90 setattr(对象/类, attr, value)
 91 getattr(对象/类, attr)
 92 hasattr(对象/类, attr) True表示有attr, False表示没有attr
 93 delattr(对象/类, attr)
 94 
 95 在代码运行的过程中,动态的给Data类设置/获取/删除属性。
 96 """
 97 jsonpath 与 类的动态属性结合
 98 """
 99 从响应结果当中,提取值,并设置为全局变量(Data类作为本框架的全局变量类)
100 1、提取表达式:放在excel当中
101    (可能提取1个,可能提取多个。。以表达式个数为准)
102 
103 2、提取出来之后,设置为Data类属性
104 """
105 # 占位符的替换
106 ss = '{"member_id":#member_id#,"amount":2000}'
107 member_id = "16"
108 new_ss = ss.replace("#member_id#", member_id)
109 print(new_ss)
110 充值接口的用例编写、自动化用例设计
111 前置:登陆
112      获取登陆的返回结果里的 token,用户id,用户余额
113 
114 步骤:充值
115 
116 接口依赖/关联处理:
117 1、将上一个接口的响应数据,提取出来(jsonpath/dict方式)之后,将它设置为全局变量(设置Data类的类属性)
118 2、下一个接口的请求数据,若要替换,直接从全局变量中读取(获取Data类的类属性值)
119 
120 处理接口关联:
121 第一步:提取值
122       通过jsonpath从响应结果中提取,然后设置为全局变量。我的框架中Data类用来存储全局变量的。
123       如何通过jsonpath去提取的呢?可能会提取1个值?可能会提取多个值?框架通用性,所有接口通用。
124       1)在excel当中添加了一列:extract。如果当前这一行的请求,有需求要从响应中提取。
125          那么就在extract列对应的位置,写上表达式。
126          形式是字典形式,key-value.key就是变量名,value就jsonpath提取表达式。
127       2)定义了一公共的提取方法:
128          解析excel当中extract列,然后从响应结果中提取,然后设置为Data类的属性。
129       3)在测试框架的接口自动化用例当中,通过判断extract列有没有值,来自动提取。
130 
131 第二步:替换值
132 
133 第一步:提取值
134       通过jsonpath从响应结果中提取,然后设置为全局变量。我的框架中Data类用来存储全局变量的。
135       如何通过jsonpath去提取的呢?可能会提取1个值?可能会提取多个值?框架通用性,所有接口通用。
136       1)在excel当中添加了一列:extract。如果当前这一行的请求,有需求要从响应中提取。
137          那么就在extract列对应的位置,写上表达式。
138          形式是字典形式,key-value.key就是变量名,value就jsonpath提取表达式。
139       2)定义了一公共的提取方法:
140          解析excel当中extract列,然后从响应结果中提取,然后设置为Data类的属性。
141       3)在测试框架的接口自动化用例当中,通过判断extract列有没有值,来自动提取。

 

上一篇:发际线和我作队——α冲刺Day10


下一篇:Java自学习day10-this关键字的使用