关于面试总结-接口自动化面试题(都是这些套路)_接口自动化面试问题(2)

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

b = ‘{“a”: 1, “b”: 2, “c”: true}’

print(type(a))
print(json.dumps(a))   # a转json


运行结果



<class ‘dict’>
{“a”: 1, “b”: 2, “c”: true}
<class ‘str’>
{‘a’: 1, ‘b’: 2, ‘c’: True}


## 2.测试的数据你放在哪?


测试数据到底该怎么放,这个是面试官最喜欢问的一个题了,似乎仁者见仁智者见智,没有标准的答案,有的人说放excel,也有的说放.py脚本,也有的说放ini配置文件,  
 还有放到json,yaml文件,txt文件,甚至有的放数据库,五花八门,一百个做自动化的小伙伴有100个放的地方。


这里总结下测试的数据到底该怎么放?


首先测试的数据是分很多种的,有登录的账户数据,也有注册的账户数据,还有接口的参数,还有邮箱配置的数据等等等等,所以这个题不能一概而论给答死了。要不然就是给自己挖坑。


以下两个大忌不能回答:


* 测试的数据是不能写死到代码里面的,这个是原则问题,也是写代码的大忌(你要是回答写在代码里面,估计就是回去等通知了)
* 测试数据放到.py的开头,这种其实很方便,对于少量的,固定不变的数据其实是可以放的,但是面试时候,千万不能这样说,面试官喜欢装逼的方法


测试数据存放总结:


1.对于账号密码,这种管全局的参数,可以用命令行参数,单独抽出来,写的配置文件里(如ini)  
 2.对于一些一次性消耗的数据,比如注册,每次注册不一样的数,可以用随机函数生成  
 3.对于一个接口有多组测试的参数,可以参数化,数据放yaml,text,json,excel都可以  
 4.对于可以反复使用的数据,比如订单的各种状态需要造数据的情况,可以放到数据库,每次数据初始化,用完后再清理  
 5.对于邮箱配置的一些参数,可以用ini配置文件  
 6.对于全部是独立的接口项目,可以用数据驱动方式,用excel/csv管理测试的接口数据  
 7.对于少量的静态数据,比如一个接口的测试数据,也就2-3组,可以写到py脚本的开头,十年八年都不会变更的


总之不同的测试数据,可以用不同的文件管理


## 3.什么是数据驱动,如何参数化?


参数化和数据驱动的概念这个肯定要知道的,参数化的思想是代码用例写好了后,不需要改代码,只需维护测试数据就可以了,并且根据不同的测试数据生成多个用例  
 python里面用unittest框架



import unittest
import ddt

测试数据

datas = [ {“user”: “admin”, “psw”: “123”, “result”: “true”},
       {“user”: “admin1”, “psw”: “1234”, “result”: “true”},
       {“user”: “admin2”, “psw”: “1234”, “result”: “true”},
       {“user”: “admin3”, “psw”: “1234”, “result”: “true”},
       {“user”: “admin4”, “psw”: “1234”, “result”: “true”},
       {“user”: “admin5”, “psw”: “1234”, “result”: “true”},
       {“user”: “admin6”, “psw”: “1234”, “result”: “true”},
       {“user”: “admin7”, “psw”: “1234”, “result”: “true”},
       {“user”: “admin8”, “psw”: “1234”, “result”: “true”},
       {“user”: “admin9”, “psw”: “1234”, “result”: “true”},
       {“user”: “admin10”, “psw”: “1234”, “result”: “true”},
       {“user”: “admin11”, “psw”: “1234”, “result”: “true”}]

@ddt.ddt
class Test(unittest.TestCase):

@ddt.data(*datas)
   def test_(self, d):
       “”“上海-悠悠:{0}”“”
       print(“测试数据:%s” % d)

if name == “main”:
   unittest.main()


unittest框架还有一个paramunittest也可以实现



import unittest
import paramunittest
import time

python3.6

作者:上海-悠悠

@paramunittest.parametrized(
   {“user”: “admin”, “psw”: “123”, “result”: “true”},
   {“user”: “admin1”, “psw”: “1234”, “result”: “true”},
   {“user”: “admin2”, “psw”: “1234”, “result”: “true”},
   {“user”: “admin3”, “psw”: “1234”, “result”: “true”},
   {“user”: “admin4”, “psw”: “1234”, “result”: “true”},
   {“user”: “admin5”, “psw”: “1234”, “result”: “true”},
   {“user”: “admin6”, “psw”: “1234”, “result”: “true”},
   {“user”: “admin7”, “psw”: “1234”, “result”: “true”},
   {“user”: “admin8”, “psw”: “1234”, “result”: “true”},
   {“user”: “admin9”, “psw”: “1234”, “result”: “true”},
   {“user”: “admin10”, “psw”: “1234”, “result”: “true”},
   {“user”: “admin11”, “psw”: “1234”, “result”: “true”},
)

class TestDemo(unittest.TestCase):
   def setParameters(self, user, psw, result):
       ‘’‘这里注意了,user, psw, result三个参数和前面定义的字典一一对应’‘’
       self.user = user
       self.user = psw
       self.result = result

def testcase(self):
       print(“开始执行用例:--------------”)
       time.sleep(0.5)
       print(“输入用户名:%s” % self.user)
       print(“输入密码:%s” % self.user)
       print("期望结果:%s " % self.result)
       time.sleep(0.5)
       self.assertTrue(self.result == “true”)

if name == “main”:
   unittest.main(verbosity=2)


如果用的是pytest框架,也能实现参数化



content of test_canshu1.py

coding:utf-8

import pytest
@pytest.mark.parametrize(“test_input,expected”,
                        [ (“3+5”, 8),
                          (“2+4”, 6),
                          (“6 * 9”, 42),
                        ])
def test_eval(test_input, expected):
   assert eval(test_input) == expected

if name == “main”:
   pytest.main([“-s”, “test_canshu1.py”])


pytest里面还有一个更加强大的功能,获得多个参数化参数的所有组合,可以堆叠参数化装饰器



import pytest
@pytest.mark.parametrize(“x”, [0, 1])
@pytest.mark.parametrize(“y”, [2, 3])
def test_foo(x, y):
   print(“测试数据组合:x->%s, y->%s” % (x, y))

if name == “main”:
   pytest.main([“-s”, “test_canshu1.py”])


## 4.下个接口请求参数依赖上个接口的返回数据


这个很容易,不同的接口封装成不同的函数或方法,需要的数据return出来,用一个中间变量a去接受,后面的接口传a就可以了


## 5.依赖于登录的接口如何处理


登录接口依赖token的,可以先登录后,token存到一个yaml或者json,或者ini的配置文件里面,后面所有的请求去拿这个数据就可以全局使用了


如果是cookies的参数,可以用session自动关联



> 
> s=requests.session()
> 
> 
> 


后面请求用s.get()和s.post()就可以自动关联cookies了


## 6.依赖第三方的接口如何处理




![img](https://img-blog.csdnimg.cn/img_convert/04c11f4677faa92ac39d4b796c6f5eb3.png)
![img](https://img-blog.csdnimg.cn/img_convert/dc6ac6370f71364167cdb4f392a48e1b.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值