接口测试我们是在XX项目做的,主要有XX接口,XX接口,XX接口等。
(1)首先是从开发那里拿到API接口文档,了解接口业务、包括接口地址、请求方式,入参、出参,token鉴权,返回格式等信息。
(2)使用Postman或Jmeter工具执行接口测试,一般使用Jmeter的步骤是这样的:
做接口的时候遇到的问题是自己独立解决,比如返回值乱码(修改Jmeter的配置文件为UTF-8编码方式),比如需要登录后才能取得token鉴权码并且这个鉴权码在下面的请求中需要使用正则表达式提取器提取token的值等。
(1)cookie数据存放在客户的浏览器上,session数据放在服务器上。而token是接口测试时的鉴权码,一般情况下登录后才可以获取到token,然后在每次请求接口时需要带上token参数。
(2)cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session,session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面应当使用cookie。
(3)可以将登录信息等重要信息存放为session;其他信息需要保存,可以放在cookie。
超文本传输协议,端口为80,特点(无记忆功能、快速)是由请求和响应两部分组成,请求由请求头、请求行、请求正文组成;响应是由响应头、响应行、响应正文组成,之前我们公司的接口是采用https协议的。https http+ssl协议 端口443 面向安全的超文本传输协议。
接口测试测试的环境有开发环境,测试环境等,为了测试的时候方便,就在Postman设置环境变量,到时所有接口都引用该环境变量,这样就不用为了切换环境导致每次都去修改被测系统接口的主机地址;点击右上角环境变量管理按钮-新建环境变量,在脚本中使用{ {变量名}}去调用。
上一个接口中通过正则表达式提取器或jsonpath解析器提取下一个接口需要的参数值保存到变量,然后再写一个接口通过${变量名}去获取变量。
列表是动态数组,长度可变,可以重设长度(改变其内部元素的个数);元组是静态数组,长度不可变,内部数据一旦创建便无法改变。
列表可以随意地增删改元素,元组不可以对元组元素进行增删改操作。
列表不能作为字典类型中的键,而元组是可以的。
列表的存储空间略大于元组,性能略逊于元组。
元组比列表的访问和处理速度更快,因此,当需要对指定元素进行访问,且不涉及修改元素的操作时,建议使用元组。
字典是使用hash表来实现key-value之间的映射和存储的数据结构,hash函数设计的好坏影响着数据的查找访问效率。字典是通过哈希表实现的,字典也被称为哈希数组。哈希函数的目的是使键均匀地分布在数组中,并且可以在内存中以O(1)的时间复杂度进行寻址,从而实现快速查找和修改。哈希表中哈希函数的设计困难在于将数据均匀分布在哈希表中,从而尽量减少哈希碰撞和冲突。
哈希算法:根据设定的哈希函数H(key)和处理冲突方法将一组关键字映射到一个有限的地址区间上的算法。也称为散列算法、杂凑算法。
哈希表:数据经过哈希算法之后得到的集合。这样关键字和数据在集合中的位置存在一定的关系,可以根据这种关系快速查询。
非哈希表:与哈希表相对应,集合中的 数据和其存放位置没任何关联关系的集合。由此可见,哈希算法是一种特殊的算法,能将任意数据散列后映射到有限的空间上,通常计算机软件中用作快速查找或加密使用。
哈希冲突:由于哈希算法被计算的数据是无限的,而计算后的结果范围有限,因此总会存在不同的数据经过计算后得到的值相同,这就是哈希冲突。
解决哈希冲突的方法有:开放定址法、链地址法(拉链法)、再哈希法、建立公共溢出区等方法。
开放定址法:当冲突发生时,使用某种探查技术在散列表中形成一个探查序列。
拉链法:将所有关键字为同义词的结点链接在同一个单链表中。
再哈希法:同时构造多个不同的哈希函数。
建立公共溢出区:将哈希表分为基本表和溢出表两部分,凡是和基本表发生冲突的元素,一律填入溢出表。
Python内存管理机制:引用计数、垃圾回收、内存池。
(1)引用计数引用计数是一种非常高效的内存管理手段, 当一个 Python 对象被引用时其引用计数增加 1, 当其不再被一个变量引用时则计数减 1, 当引用计数等于 0 时对象被删除。
(2)垃圾回收
① 引用计数
引用计数也是一种垃圾收集机制,而且也是一种最直观,最简单的垃圾收集技术。当 Python 的某个对象的引用计数降为 0 时,说明没有任何引用指向该对象,该对象就成为要被回收的垃圾了。比如某个新建对象,它被分配给某个引用,对象的引用计数变为 1。如果引用被删除,对象的引用计数为 0, 那么该对象就可以被垃圾回收。不过如果出现循环引用的话,引用计数机制就不再起有效的作用了。
② 标记清除
如果两个对象的引用计数都为 1,但是仅仅存在他们之间的循环引用,那么这两个对象都是需要被回收的,也就是说,它们的引用计数虽然表现为非 0,但实际上有效的引用计数为 0。所以先将循环引用摘掉,就会得出这两个对象的有效计数。
③ 分代回收
分代回收是一种以空间换时间的操作方式,Python 将内存根据对象的存活时间划分为不同的集合,每个集合称为一个代,Python 将内存分为了 3“代”,分别为年轻代(第 0 代)、中年代(第 1 代)、老年代(第 2 代),他们对应的是 3 个链表,它们的垃圾收集频率与对象的存活时间的增大而减小。
新创建的对象都会分配在年轻代,年轻代链表的总数达到上限时,Python 垃圾收集机制就会被触发,把那些可以被回收的对象回收掉,而那些不会回收的对象就会被移到中年代去,依此类推,老年代中的对象是存活时间最久的对象,甚至是存活于整个系统的生命周期内。
同时,分代回收是建立在标记清除技术基础之上。分代回收同样作为 Python 的辅助垃圾收集技术处理那些容器对象。
(3)内存池
Python在运行期间会大量地执行malloc和free的操作,频繁地在用户态和核心态之间进行切换,这将严重影响Python的执行效率。为了加速Python的执行效 率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。
浅拷贝: 创建新对象,其内容是原对象的引用。浅拷贝有三种形式:切片操作,工厂函数,copy模块中的copy函数。浅拷贝之所以称为浅拷贝,是它仅仅只拷贝了一层。如:lst = [1,2,3,[4,5]]
切片操作:lst1 = lst[:] 或者 lst1 = [each for each in lst] 要注意:list1=lst 和list1=lst[:]的区别
工厂函数:lst1 = list(lst)
copy函数:lst1 = copy.copy(lst)
深拷贝:只有一种形式,copy模块中的deepcopy函数。和浅拷贝对应,深拷贝拷贝了对象的所有元素,包括多层嵌套的元素。深拷贝出来的对象是一个全新的对象,不再与原来的对象有任何关联。
建议时将问题归咎在自己身上,就算在前一个工作受到再大的委屈,对公司有多少的怨言,都千万不要表现出来,尤其要避免对公司本身主管的批评,避免面试官的负面情绪及印象。
觉得工作没有学习发展的空间,自己想在面试工作的相关产业中多加学习,或是前一份工作与自己的生涯规划不合等等,回答的答案最好是积极正面的。
我希望能获得一份更好的工作,如果机会来临,我会抓住;我觉得目前的工作,已经达到顶峰,即沒有升迁机会,想要寻求更好的发展空间。
首先感谢上家公司提供的提升自我工作经验的机会,之所以想离职是因为想积累不一样的经验,更进一步的学习,来提升自己。我获得了测试的经验,业务的熟悉,技能的提升,以及团队配合协作的精神、坚持不懈的精神。我想趁这个机会跳槽,去新环境充实自己。
如果你已经对该单位作了研究,你可以回答一些详细的原因:
公司本身的高技术开发环境很吸引我;
我希望能够进入一家与我共同成长的公司;
公司一直都稳定发展,在近几年来在市场上很有竞争力;
我认为贵公司能够给我提供一个与众不同的发展道路;
这都显示出你已经做了一些调查,也说明你对自己的未来有了较为具体的远景规划。
公司问这个问题,并不证明一定要加班。只是想测试你是否愿意为公司奉献。可以这么回答:
如果有幸进入贵公司,首先,我会尽快熟悉项目的业务流程,尽早融入到团队中,和开发人员多沟通交流 ;其次,利用测试工具和所积累的测试技巧,熟悉某些业务的Bug可能性关键点 ,为客户提供满意的产品;再次,我会利用工作之余进行充电,及时总结工作,努力提高自己的专业技能,完善自己的性能测试自动化测试技能,在工作中慢慢积累经验,使自己强大起来,以后担任更重要的职务,为公司创造价值。
如果你对薪酬的要求太低,那显然贬低自己的能力;如果你对薪酬的要求太高,那又会显得你分量过重,公司受用不起。一些雇主通常都事先对求聘的职位定下开支预算,因而他们第一次提出的价钱往往是他们所能给予的最高价钱。他们问你只不过想证实一下这笔钱是否足以引起你对该工作的兴趣。
如果你必须自己说出具体数目,请不要说一个宽泛的范围,那样你将只能得到最低限度的数字。最好给出一个具体的数字,这样表明你已经对当今的人才市场作了调查,知道像自己这样的雇员有什么样的价值。
我受过系统的软件编程的训练,不需要进行大量的培训。而且我本人也对编程特别感兴趣。因此,我希望公司能根据我的情况和市场标准的水平,给我合理的薪水。