赞
踩
1、单独调用第三方服务,查看返回结果;
2、引入mock机制,假如正常返回的情况下,测试我们的系统是否存在问题;
3、建议开发增加日志,详细记录调用第三方接口的过程,记录调用前接口入参,返参等信息;
将请求返回的结果反射到类属性中,使用setattr()函数,下个请求调用这个类。
例如:
class Person: def __init__(self,name): self.name=name def play(self): pass def run(self): print(self.name) Person.age=18 if not hasattr(Person, 'age1'): setattr(Person, 'age1', 19) p1=Person('p1') p1.run=types.MethodType(run,p1) p1.run()
1、自动化测试用例的覆盖率=自动化测试用例数/所用用例总数,这个比例越高测试反馈越快,成本节约越多
2、节省的时间成本=手工测试所花的时间-自动化测试所花的时间
3、自动化测试的投入=开发脚本的投入+脚本维护的投入+工具价格
4、自动化测试发现的缺陷数,每次回归测试时自动化测试发现的缺陷数及漏测数,反应了自动化用例的有效性
5、自动化测试投入产出比
ROI=(手工测试的成本-自动化测试成本)/自动化测试成本
ROI如果是负值说明自动化测试的成本未收回,ROI为正值说明自动化测试成本已回收,且值越大说明回报越好
可以使用shuffle函数进行随机列表元素
当Python退出时,尤其是那些对其他对象具有循环引用的Python模块或者从全局名称空间引用的对象并没有被解除分配或释放。
无法解除分配C库保留的那些内存部分。
退出时,由于拥有自己的高效清理机制,Python会尝试取消分配/销毁其他所有对象。
DNS 是域名系统 (Domain Name System),DNS 是用来做域名解析的,它会在你上网输入 网址后,把它转换成 IP,然后去访问对方服务器;没有它,你想上百度就要记住百度的 IP, 但有了 DNS 的处理,你只需要记住对应网站的域名,即网址就可以了。
def f(x, l=[]): for i in range(x): l.append(i * i) print(l) f(2) f(3, [3, 2, 1]) f(3) 结果: [0] [0, 1] [3, 2, 1, 0] [3, 2, 1, 0, 1] [3, 2, 1, 0, 1, 4] [0, 1, 0] [0, 1, 0, 1] [0, 1, 0, 1, 4]
for i in range(1, 1000):
if i % 7 == 0 and i % 5 ==3:
print(i)
执行结果:
28
63
98
133
168
........
三本书的价格分别为: 5,3,0.5,那么能买到最多的数学书为20本,英语书33本,语文书200本。但是也有组合的买法,所以可以通过一个三重for循环来实现, ijk分别代表购买数学,英语,语文书的数量,循环条件分别是i<=20,j<=33,k<=200,那么只要满足 i+j+k == 100,5i+3j+0.5*k<= 100即可。最后统计所有的组合就是买法的数量。
n = 0
for i in range(21):
for j in range(34):
for k in range(201):
if 5 * i + 3 * j + k * 0.5 <= 100 and i + j + k == 100:
n += 1
print(n)
则L[3]的值是_ L[::5]的值是__ L[::2]值是_
L = ["a", "b", "c", "d", "e", "F", "g"]
print(L[3])
print(L[::5])
print(L[::2])
执行结果:
d
['a', 'F']
['a', 'c', 'e', 'g']
x = [1, 2]
a1 = list(enumerate(x))
print(a1)
# 执行结果:[(0, 1), (1, 2)]
如: myOrder( abejykhsesm’,2,5)
输出: ehjky
def fun(s,start,len):
s=s[start:start+len]
s1=list(s)
s1.sort()
print(s1)
res=''.join(s1)
print(res)
fun('qweqweqwe',2,5)
def fun1(l):
l.sort(reverse=True)
max=l[0]
max_count=l.count(max)
min=l[-1]
min_count=l.count(min)
return max,max_count,min,min_count
l=[1,4,6,8,9,9,5,3,6]
print(fun1(l))
以下是过程
s = ''
for i in L:
s = s + str(i)
print(s) # 12356
print(type(s)) # <class 'str'>
GIL 是python的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行python程序的时候会霸占python解释器(加了一把锁即GIL),使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行。所以在多线程中,线程的运行仍是有先后顺序的,并不是同时进行。
多进程中因为每个进程都能被系统分配资源,相当于每个进程有了一个python解释器,所以多进程可以实现多个进程的同时运行,缺点是进程系统资源开销大
可以:定位是可以定位到的,但是不能操作,可以判断元素is_displayed()
想点击的话,可以用js去掉dispalay=none
的属性
Application/x-www-form-urlencoded
:将参数以一组键对值的方式发送
Multipart/form-data
:支持单组和多组文件上传
Application/json
:根据后端接口的定义支持数据类型
Text/xml
1.解析地址
2.浏览器查询,是否存在浏览器缓存中,如果没有
3.Tcp连接,想服务器发送请求
4.服务器返回接口,并且在浏览器中添加缓存
5.前端渲染页面
======================================
(1)URL 解析
(2)DNS 查询
(3)TCP 连接
(4)处理请求
(5)接受响应
(6)渲染页面
方法 | 说明 |
---|---|
NoSuchElementException | 当选择器没有返回一个元素时,异常抛出 |
ElementNotVisibleException | 元素DOM存在,但它是不可见的,不能与之进行交互,异常将抛出 |
NoSuchAttributeException | 当选择元素不存在该属性时,抛出异常 |
ElementNotSelectableException | 当选择不可选元素时,抛出异常 |
NoSuchFrameException | 当切换的框架不存在时,异常抛出 |
TimeoutException | 当执行操作命令执行超过最长时间完成,抛出异常 |
NoSuchWindowException | 当切换的目标窗口不存在时,异常抛出 |
1、通过pytest单元测试框架组织管理测试用例
2、引入page object思想对用例进行分层设计,业务代码和测试代码相分离
3、页面元素共性操作提取:basepage封装,实现实时执行日志输出,异常实时捕获,用例失败截图
4、测试用例中,使用数据驱动
5、logging日志引入,问题定位
6、allure报表,用例失败后截图
7、用例失败重试,提高用例稳定性
8、集成到jenkins中,每天\小时构建多次
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。