**
**
借鉴链接:https://www.cnblogs.com/xiamaojjie/p/11891396.html
https://blog.csdn.net/m0_58395003/article/details/117232056
https://zhuanlan.zhihu.com/p/58370623
框架分层:自动化测试框架分为5层(配置层,脚本层,数据层,测试报告层,驱动层)接口项目工程规划大致可分为几类,首先是测试结果类,比如说叫test_rusult,里面存放一些比如说,日志文件,测试报告。然后是测试用例testcase,里面分模块存放测试用例。接下来是公共方法类,比如说叫public,或者是tools。里面比如说存放一些,读取excel数据的方法,发送http请求的方法,收集log日志的方法,发送邮件,操作数据库等方法。还有就是配置文件类,比如说叫config,里面存放一些比如说,指定运行部分用例的配置文件,连接数据库的配置文件。
数据依赖:
第一种,global全部变量的方式解决,将你需要用到的依赖数据提取出来,升他为全局变量。比如说在APP接口测试里面常用到token做鉴权效验,用一个全局变量来处理依赖的数据,比如登录后返回token,其它接口都需要这个token,那就用全局变量来传token参数。全局变量有其局限性,不能夸.py文件调用。
第二种,放setUp里面,将接口有依赖的数据提取出来,放到setUp里面,每次运行用例前,都会首先自动运行setUp函数。
第三种,反射实现。首先定义一个类,比如说获取cookie,定义一个GetCookie,里面的类属性给他一个初始值,比如说cookie=None。然后用python里面的setattr函数给刚才定义cookie值为空的属性赋值。最后再用getattr函数取出里面的cookie。个人感觉这种方式实现比较好,也不用担心cookie有效期的问题。
用例可配置问题:
首先为什么要做用例可配置:举个场景,你要吧你写的脚本给你同事运行,假设你同事不懂代码,或者是刚来没多久,还没看懂你的代码。这个时候你要叫人家帮你执行下用例,人家肯定2眼一懵逼啊!这个时候配置文件的作用就来了,你只需要将你的配置文件简单说下,人家就能执行,比如说你的配置文件是这样写的,写了一个按钮的变量,给的默认参数是all执行全部,但是还可以传列表,假设你设计时是根据你的用例编号,或者模块名,判断用例编号,或者模块名是否在这传的列表里面,从而执行选定的用例。达到用例可配置的效果。
实现参数化:
测试每天测试东西,除开页面而言,其本质就是数据驱动测试,无论是正常的场景也好,异常的场景也好,其实就是数据在发生变化。众所周之,使用unittest框架编写测试用例不能定义形参在方法里面,在我使用unittest做接口测试过程中,参数化主要是用的ddt这个模块实现的。ddt模块最常用的有3个常用函数ddt,data,unpack。ddt用来装饰类,data用来接收数据,uppack用来拆包。调用公共方法,读取到excel数据,将数据赋值给一个变量给data装饰器使用,在方法里面用一个参数接收装饰器里面的数据,data装饰器会自动对这个函数进行拆包,比如说,从excel里面读取是一个列表嵌套字典的数据类型,经过data拆解后就会变成字典,最后根据key取值,发起http请求。
如何在Python中内存管理:
Python内存由Python私有堆空间管理。所有Python对象和数据结构都位于私有堆中。程序员无权访问此私有堆,解释器负责处理此私有堆。
Python对象的Python堆空间分配由Python内存管理器完成。核心API提供了一些程序员编写代码的工具。
Python还有一个内置的垃圾收集器,它可以回收所有未使用的内存并释放内存并使其可用于堆空间。
进程、线程有什么区别?什么情况下用进程?什么情况下用线程?
① 地址空间和其它资源(如打开文件):进程之间相互独立,同一进程的各线程之间共享。某进程内的线程在其它进程不可见。
② 通信:进程间通信 IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。
③ 调度和切换:线程上下文切换比进程上下文切换要快得多。
④ 在多线程操作系统中,进程不是一个可执行的实体。
(2)使用场景:同时操作一个对象的时候,比如操作的是一个全局变量,我用线程,因为全局变量是所有线程共享的。
什么是ORM?为什么要用ORM?不用ORM会带来什么影响?
ORM 框架可以将类和数据表进行对应,只需要通过类和对象就可以对数据表进行操作。
通过类和对象操作对应的数据表,类的静态属性名和数据表的字段名一一对应,不需要写 SQL 语句。
ORM 另外一个作用,是根据设计的类生成数据库中的表。