Python3学习笔记_接口基础五_20200613/16/18/20
0613解决三个问题:
①手机号码动态生成
②框架优化:使用中间层,middler ware
③__:私有属性
动态替换手机号的标志:#phone#
0616:
1、登录接口
①账号替换
②拼接URL
③ 断言:code,msg
④得到token,member_id
⑤登录成功的手机号和密码可以提前准备测试账号:
-直接放到Excel当中
-放入yaml配置文件,Excel数据使用#mobile_phone# #password#标识
2、充值接口
需要用到member_id,可以直接放到yaml配置文件中
member_id也可以从登录接口中获取
3、接口依赖:
①一个接口的测试需要另一个接口作为前置条件
②充值接口需要登录接口:1、获取token 2、获取member_id
0618
1、添加接口:
①如何断言添加项目成功?
-接口返回的code和msg匹配
-查数据库,多一条项目记录在loan表,select * from loan where member_id={}
-查询的时候使用get_data(sql,one=False)
-断言len(before_loan)+1==len(after_loan)
2、审核接口:
①前提:
-管理员要登录
-add,添加项目,没有审核的项目
②审核的时候有没有审核成功?
-预期结果,status=2
-实际结果,查loan表根据loan_id去找
3、正则表达式
-学习正则表达式非常难(1、非常抽象 2、非常人容易忘记)
-学习正则表达式,学的是用法和作用,具体语法规则,能记住几个就先记几个,用的时候再去查
4、正则表达式的作用
-是为了匹配字符串,替换字符
import re
re.search()–匹配第一个出现的
re.findall()–匹配所有的
re.match()----匹配最开始的地方
0620
1、投资接口
-前置条件,接口依赖
-普通用户登录
-添加项目
-审核项目
-充值
2、正则表达式
-是一门通用的技术,和编程语言无关
#示例
‘ab77788fafd’ 匹配 ‘ab’
demo_正则表达式.py:
“”“regular expression===> re=====>正则表达式 regx”""
import re
#match
#search
#findall
#1、 正则表达式通常在匹配方式前加r,r’a\b’,加r表示取消转义
#\n \t
#2、 正则表达式中不要随便加空格
print('ab\n') #结果:ab, \n表示换行
print(r'ab\n') #结果:ab\n
my_string='xiaolingwangle'
#match一定要从最开始的地方匹配
re.match(r'ling',my_string)
#search可以在任意地方匹配,匹配第一次出现的结果
res=re.search(r'ling',my_string)
print(res.group()) #得到的结果是匹配到的字符串,返回的结果是字符串类型
print(res.start()) #得到的结果是匹配到的字符串的开始索引
print(res.end()) #得到的结果是匹配到的字符串的结束索引
mystring='xiaolingwangleli'
res=re.search(r'ling',my_string)
print(res.group())
#findall匹配全部
print(re.findall(r'li',mystring)) #得到的结果是列表:['li', 'li']
#. 匹配任意一个字符,除了\n
mystring='xiaolingwangleli'
print(re.search(r'.',mystring)) #结果是:x
#a.
print(re.search(r'a.',mystring)) #结果是:ao
#[]代表匹配里面的某一个[abc]a或者b或者c,哪个索引值在前,就先匹配哪个
print(re.search(r'[oge]',mystring)) #结果是:o
print(re.search(r'[xge]',mystring)) #结果是:x
#扩展
print(re.search(r'[li|wa]',mystring))
print(re.search(r'[(li)|(wa)]',mystring))
#\d 表示匹配一个数字,\D 表示匹配一个非数字
mystring='@_xiaolingggg256wangleli'
print(re.search(r'\d',mystring)) #结果是:2
print(re.search(r'\D',mystring)) #结果是:x
#与\d 是等价的
print(re.search(r'[0-9]',mystring)) #结果是:2
#\w :a-z,A-Z ,0-9,下划线 (大小写字母数字下划线) ,\W
print(re.search(r'\w',mystring)) #结果是:x
print(re.search(r'\w\w\w',mystring)) #结果是:_xi
print(re.search(r'\W',mystring)) #结果是:@
#* 表示前面字符0到无数次
print(re.search(r'\d*',mystring)) #非贪婪模式:0次
print(re.search(r'.*',mystring)) #贪婪模式:尽可能多的匹配:@_xiaoling256wangleli
#+ 表示前面字符1到无数次
print(re.search(r'\d+',mystring)) #贪婪模式:尽可能多的匹配:256
#? :一次或者是0次,通常的用法表示非贪婪模式
print(re.search(r'\d+?',mystring)) #非贪婪模式:1次
print(re.search(r'\d*?',mystring)) #非贪婪模式:0次
#{m} :匹配多少次
print(re.search(r'g{5}',mystring)) #None
print(re.search(r'g{3}',mystring)) #ggg
print(re.search(r'g{2,}',mystring)) #贪婪模式:gggg
print(re.search(r'g{2,}?',mystring)) #非贪婪模式:gg
#.*#
#.+#
login_data='{"member_id":"#member_id#","amount":"#money#"}'
pattern=r'#.+#'
print(re.search(pattern,login_data)) # 结果:#member_id#","amount":"#money#
pattern=r'#.+?#'
print(re.search(pattern,login_data)) # 结果:#member_id#
#print(re.search(pattern,login_data).group())
#替换操作
result=re.sub(pattern,'123',login_data) #{"member_id":"123","amount":"123"}
print(result)
result=re.sub(pattern,'123',login_data,count=1) #替换一次,{"member_id":"123","amount":"#money#"}
print(result)
result=re.sub(pattern,'456',result) #{"member_id":"123","amount":"456"}
print(result)
#循环操作
while re.search(pattern,login_data):
pass
#括号表示分组
login_data='{"member_id":"#member_id#","amount":"#money#"}'
pattern=r'#.+?#'
#group0 #member_id#
print(re.search(pattern,login_data).group()) # #member_id# ,group默认参数是0
#print(re.search(pattern,login_data).group(1)) # no such group
#group1 member_id
pattern=r'#(.+?)#'
print(re.search(pattern,login_data).group(1)) # member_id
#group0 表示正则表达式匹配的字符
#除了group0以外,表示括号里面呢的内容,有多少个括号,就有多少个分组
#有问题?
pattern=r'#(.+?)#(,")'
print(re.search(pattern,login_data).group(2)) #报错:AttributeError: 'NoneType' object has no attribute 'group'
#动态数据的获取:
#通过:Handler.属性的方式访问数据
getattr()方法的使用:动态获取属性
class Handler:
a=1
b=2
print(Handler.a)
key='a'
print(getattr(Handler,key,""))
key='b'
print(getattr(Handler,key,""))
key='c'
print(getattr(Handler,key,"hello"))