Python3学习笔记_接口基础五_20200613/16/18/20

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"))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值