企业微信接口测试实战1
企业微信接口测试实战1 http://home.testing-studio.com/t/topic/5478
企业微信接口测试实战1 课程内容介绍:接口请求组合,针对测试用例封装优化,让测试用例速度快些(并发执行) 3min30s
企业微信接口测试实战1 restful 架构 24min24s
企业微信接口测试实战1 46min10s
1.加入session会话让请求更灵活,每次都要用token,可以将token塞到session中,维持一段会话,这样我们就不用每次都去获取token
2.加代理
3.加证书认证
企业微信接口测试实战1 r.json() 为字典格式 1h01min20s
#restful 架构
#四个动作:GET|POST|PUT|DELETE
#加入session会话让请求更灵活,每次都要用token,可以将token塞到session中,维持一段会话,这样我们就不用每次都去获取token
企业微信接口测试实战2
企业微信接口测试实战2 requests请求 参数用json来接的时候,是将python字典转换成 json字符串 4min12s
json.loads() 把json对象转成python字典
json.dumps() 把python字典转为json
企业微信接口测试实战2 碰到get方法将请求参数放到params中 ,同时其他方法需要调用同类中方法时记得将被调用方法test开头给去掉 25min52s
#碰到get方法将请求参数放到params中 ,同时其他方法需要调用同类中方法时记得将被调用方法test开头给去掉
企业微信接口测试实战3
1.企业微信接口测试实战3 增删改查时不要每次都重新创建token,希望token可以在各个地方进行复用,理解为单例模式 5min36s
解决方案;
1.故意封装为代理,类中作为静态,或者做成与类无关的东西,每次去获取静态类
2.借助pytest特性,实现单个token获取
第二种方案fixture scope="session" session级别,所有的model共用一个fixture。如果scope="model"只作用于当前model 6min53s
企业微信接口测试实战3 定义fixture,创建新成员用例使用fixture功能获取token值 8min20s
2.企业微信接口测试实战3 整体测试 10min39s
单个接口组合起来做一个集成测试
企业微信接口测试实战3 实现举例 29min14s
3.企业微信接口测试实战3 直接参数化,默认department=[1] 这样写参数化会有问题,需要思考14min07s
21min27s 解释参数只会被初始化一次,不会每次都会去初始化。参数里面进行参数化,数据不能是list
4.企业微信接口测试实战3 参数化,有很多内容时可以进行追加 *args,**kwargs 16min50s
5.企业微信接口测试实战3 举例加上是否存在应对一些异常处理 31min35s
try:
pass
except AssertionError as e:
if "xxx" in e.__str__():
pass
#一定要通过str进行提取,因为e不包含异常信息
5.1 新增时先try except,如果发现新增不成功,判断异常信息是否在抛出的异常信息中,如果在的话我们先用正则提取,或者是先查询再删除,我们采用正则方式,re是正则的包,:开头’结尾提取中间的userid,那么表达式为":(.*)’$" $表示结尾 35min55s
本来只有一个值,我们用[0]取第一个值。如果检测捕捉到异常,那么我们在异常处理时先通过删除接口删掉这条userid信息,然后再通过新增接口进行数据新增 36min49s
6.企业微信接口测试实战3 数据参数化 42min00s
6.1 列表生成器,结合元组生成的一组数据,注意生成数据后一定要return回去 48min11s
6.2 该案例,参数化方法生成数据并不是那么严谨,利用列表生成器结合元组做的数据驱动 ,数据调用 48min22s
6.2.1 列表生成器有个坑,如果数据特别大的话会占爆内存,可以用生成器处理这种情况。生成器生成数据不会塞到内存中,会一条条去读。
6.2.2 还有一种是迭代器,用()进行包裹,和列表生成器不同,列表是[]包裹,可以后面进行了解 50min27s
7.企业微信接口测试实战3 加速运行测试,并发,在一个进程中创建多个并发的运行程序 55min42s
7.1 并发会有时间种子问题,会一次创建相同的多个数据去运行,所以我们需要对数据进行处理。对数据进行拼接 1h00min04s
("138%08d"%x )%08d表示算上x的值 不足的位数用0补齐8位
1.实现单个token获取
#借助pytest特性,使用fixture,实现单个token获取
1.1#借助pytest特性,使用fixture,实现单个token获取 案例 获取token
1.2#借助pytest特性,使用fixture,实现单个token获取 案例调用
2.整体测试,调用token,使用生成的token只调用了一次生成token接口
3. 直接参数化,默认department=[1] 这样写参数化会有问题,需要思考14min07s
#如果在参数化上面直接写默认参数 如 def test_create(self,token,userid,name,mobile, department = [1]) 会有问题
#参数里面进行参数化,数据不能是list
4.直接参数化添加多个变量,有很多内容时可以进行追加 args,**kwargs 16min50s
#断言
5.异常处理
5.1新增时先try except,如果发现新增不成功,判断异常信息是否在抛出的异常信息中,如果在的话我们先用正则提取,或者是先查询再删除,我们采用正则方式,re是正则的包,:开头’结尾提取中间的userid,那么表达式为": (.)’$" $表示结尾 35min55s
本来只有一个值,我们用[0]取第一个值。
5.2如果检测捕捉到异常,那么我们在异常处理时先通过删除接口删掉这条userid信息,然后再通过新增接口进行数据新增 36min49s
6.数据参数化
列表生成器,结合元组生成的一组数据,注意生成数据后一定要return回去 48min11s
6.2 该案例,参数化方法生成数据并不是那么严谨,利用列表生成器结合元组做的数据驱动 ,数据调用 48min22s
6.2.1 列表生成器有个坑,如果数据特别大的话会占爆内存,可以用生成器处理这种情况。生成器生成数据不会塞到内存中,会一条条去读。
6.2.2 还有一种是迭代器,用()进行包裹,和列表生成器不同,列表是[]包裹,可以后面进行了解 50min27s
#参数化方法生成数据
#调用参数化方法
#6.2.2 还有一种是迭代器,用()进行包裹,和列表生成器不同,列表是[]包裹,可以后面进行了解 50min27s
7.测试数据优化
加速运行测试,并发,在一个进程中创建多个并发的运行程序 55min42s
7.1 并发会有时间种子问题,会一次创建相同的多个数据去运行,所以我们需要对数据进行处理。对数据进行拼接 1h00min04s
("138%08d"%x) #%08d表示算上x的值 不足的位数用0补齐8位
企业微信接口测试实战4
1.pytest-xdist 是pytest插件,专门用于解决测试用例的并发 企业微信接口测试实战1min39s
2.每次运行用例不可能都通过命令行方式去运行,此时我们可以创建一个pytest.ini文件,追加参数,这样每次通过pytest运行的时候都会追加上该参数去运行 pytest -n auto #auto 代表自动运行并发数 ,并发数由物理逻辑、非物理逻辑共同决定n的数量 ,比如你设定n的值为100,但是你的物理上线是10,那么n也为10 3min56s
3.通过pytest-xdist是进程并行。也可以通过创建线程池,放进去运行跑多线程。
selenium grid是分发,不是做并行 17min34s
4.问题原因:(更新方法)先把参数化默认手机号删掉 ,每次都要改默认值,mobile非必填,每次改为相同手机号所以会报错 13min29s
4.1上面创建方法进行了try except处理。后面调用update方法没有进行判断所以报错 19min47s
5.并行运行测试用例时,@pytest.fixture(scope=“session”) 定义fixture,创建新成员用例使用fixture功能获取token值
会生成n次token,n为实际并行数 21min40s
5.1保证并发运行时只用了一次token 获取的token加到文件中,加并行锁 24min01s
1.pytest-xdist 介绍
pytest-xdist 是pytest插件,专门用于解决测试用例的并发
2.每次运行用例不可能都通过命令行方式去运行,此时我们可以创建一个pytest.ini文件,追加参数,这样每次通过pytest运行的时候都会追加上该参数去运行 pytest -n auto #auto表示自动运行并发数
3.通过pytest-xdist是进程并行。也可以通过创建线程池,放进去运行跑多线程。
selenium grid是分发,不是做并行
4.课堂案例问题原因:(更新方法)先把参数化默认手机号删掉 ,每次都要改默认值,mobile非必填,每次改为相同手机号所以会报错
上面创建方法进行了try except处理。后面调用update方法没有进行判断所以报错 19min47s
5.【并行】运行测试用例时,@pytest.fixture(scope=“session”) 定义fixture,创建新成员用例使用fixture功能获取token值
会生成n次token,n为实际并行数 21min40s
这样生成token有问题,不能每运行用例都要生成多余token
解决方案:保证并发运行时只用了一次token 获取的token加到文件中,加并行锁
企业微信接口测试实战5
1.改造1.各个测试用例对象细分到一个page文件中
改造2.po模式设计出来,用一个封装的方式做一个分层的设计
改造3.常见的数据驱动放在yaml文件中
2.pytest -s 运行过程中执行print函数 13min55s 企业微信接口测试实战5 参考链接:https://www.cnblogs.com/sc912/p/11369237.html
3.util工具类实现获取token 17min44s 图片在你之前
调用:将公用的方法抽离出来,例如获取token的数据放在util包(类似basepage)下面,其他需要调用的页面,先用__init__方法初始化,然后使用self.token进行调用 17min25s
4.报错是因为Wework().get_token()调用不到报错,是因为我们将get_token()放在util包下面了,此时处理有俩种方式,
方式1: 用util().get_token() 获取token
方式2: 用Wework().test_get("userid")去查token 19min03s
5.baseapi放一些公共的api方法,发送get方法,发送post方法。
get底层调用的是request方法,只是第一个参数传递的是get
post底层调用的也是request方法,只是第一个参数传递的是post 23min33s
直接传递data,data里面包含请求方法、请求参数等。所以我们再调用request方法时需要解字典 24min50s
baseapi文件直接返回json格式的数据 28min08s
baseapi文件返回json格式的数据一定要return回去 31min23s
wework.py文件调用baseapi方法 27min59s
6.baseapi文件直接返回json格式的数据 28min08s
wework.py文件调用baseapi方法,别忘记传参method字典,数据data里面一定要加入method字典数据的哈 27min59s
7.运行create用例 30min56s
8.改造查询get接口API 33min51s
9.改造update接口 35min56s
10.改造delete接口 36min44s
11.控制台运行update测试用例 37min53s
12.定义类的时候加()是继承括号里面父类方法,不加()是直接继承Object 38min44s
13.控制台运行delete测试用例 43min06s 43min24s
14.解字典案例介绍 48min47s
15.把数据放在配置文件中进行数据驱动,配置文件中定义一种方式,按照这种方式进行解析即可 53min36s
16.通过yaml文件进行数据驱动,yaml文件碰到变量时需要用${变量名}进行替换,如果碰到类似url包含变量替换时记得将格式化f给删掉 55min21s
如果碰到类似url包含变量替换时记得将格式化f给删掉,同时将self.token替换为token 55min21s
17.API方法调用yaml文件数据改造 56min22s
18.(修改前)修改baseapi文件,baseapi做变量替换 ,将yaml参数化文件进行引用 56min28s
18.1 json.dumps()转换成 json格式 baseapi完成变量替换 58min12s
18.2 wework api中则需要再进行修改,不仅是通过baseapi进行变量替换还需要进行赋值 wework api 完成赋值 59min38s
#为了演示方便,本应有四组数据进行替换,案例只展示了俩组数据替换,请知悉,企业微信接口测试实战6课件会将数据加进去的哈
18.3 wework API __init__方法完成token赋值 59min38s
2.pytest -s 运行过程中执行print函数 13min55s 企业微信接口测试实战5
3.1util工具类实现获取token 17min44s
3.2调用:将公用的方法抽离出来,例如获取token的数据放在util包(类似basepage)下面,其他需要调用的页面,先用__init__方法初始化,然后使用self.token进行调用 17min25s
4.1报错是因为Wework().get_token()调用不到报错,是因为我们将get_token()放在util包下面了,此时处理有俩种方式,
方式1: 用util().get_token() 获取token
方式2: 用Wework().test_get(“userid”)去查用户 19min03s
#报错内容:报错是因为Wework().get_token()调用不到报错,是因为我们将get_token()放在util包下面了
4.2方式2: 用Wework().test_get(“userid”)去查用户 19min03s
#采取方式2 是直接调取get方法查询用户信息
5.1baseapi放一些公共的api方法,发送get方法,发送post方法。
get底层调用的是request方法,只是第一个参数传递的是get
post底层调用的也是request方法,只是第一个参数传递的是post 23min33s
5.2直接传递data,data里面包含请求方法、请求参数等。所以我们再调用request方法时需要解字典 24min50s
5.3wework.py文件调用baseapi方法 27min59s
#对上面数据优化,并将结果进行返回
5.4baseapi文件直接返回json格式的数据 28min08s
#5.2基础上优化
5.5baseapi文件返回json格式的数据一定要return回去 31min23s
6.1baseapi文件直接返回json格式的数据 28min08s
6.2wework.py文件调用baseapi方法,别忘记传参method字典,数据data里面一定要加入method字典数据的哈 27min59s
7.运行create用例
8.改造查询get接口API
9.改造update接口
10.改造delete接口
11.控制台运行update测试用例
12.定义类的时候加()是继承括号里面父类方法,不加()是直接继承Object
13.控制台运行delete测试用例
14.解字典案例介绍
15.把数据放在配置文件中进行数据驱动,配置文件中定义一种方式,按照这种方式进行解析即可
16.通过yaml文件进行数据驱动,yaml文件碰到变量时需要用${变量名}进行替换,如果碰到类似url包含变量替换时记得将格式化f给删掉
如果碰到类似url包含变量替换时记得将格式化f给删掉,同时将self.token替换为token
17.API方法调用yaml文件数据改造
18.(修改前)修改baseapi文件,baseapi做变量替换 ,将yaml参数化文件进行引用
18.1 json.dumps()转换成 json格式 baseapi完成变量替换
18.2 wework api中则需要再进行修改,不仅是通过baseapi进行变量替换还需要进行赋值 wework api 完成赋值
#为了演示方便,本应有四组数据进行替换,案例只展示了俩组数据替换,请知悉,企业微信接口测试实战6课件会将数据加进去的哈
wework API __init__方法完成token赋值
企业微信接口测试实战6
1.提取data数据时一定要注意提取到使用的yaml文件层级 企业微信接口测试实战6 1min53s
2.create接口department传入时一定要注意,yaml中传入的是字典,那么wework api中也要做相应的修改 4min46s 5min28s
3.params是在 baseapi上进行定义的 7min38s
4.with open写到__init__方法里面 13min03s
4.1wework API调用__init__ 里面with open方法13min57s
5.1 request有个session,最开始创建一个会话,后面不用每次都创建会话,只需要用第一次会话发送请求就可以了 15min48s
5.2用session发送请求时未带token也可以发送成功,是因为access_token 对应上了util().get_token() 20min28s
5.3使用session时一定要注意过期时间,过一段时间session会过期 22min09s
作业贴 ceshiren.com/t/topic/5485
1.提取data数据时一定要注意提取到使用的yaml文件层级
2.create接口department传入时一定要注意,yaml中传入的是字典,那么wework api中也要做相应的修改
3.params是在 baseapi上进行定义的
4.1 with open写到__init__方法里面
4.2 wework API调用__init__ 里面with open方法
5.1request有个session,最开始创建一个会话,后面不用每次都创建会话,只需要用第一次会话发送请求就可以了
5.2用session发送请求时未带token也可以发送成功,是因为access_token 对应上了util().get_token()
5.3使用session时一定要注意过期时间,过一段时间session会过期(注意接口文档,找开发确认session过期时间)