#每日一题#自动化 2024年10月

devtools/2024/10/23 20:18:03/

#每日一题#自动化

2024年10月

1、深拷贝和浅拷贝的区别是什么?

参考答案:

深拷贝是将对象本身复制给另一个对象。这意味着如果对对象的副本进行更改时不会影响原对象。在 Python 中,我们使用 deepcopy()函数进行深拷贝,深拷贝的话,是深层拷贝,拷贝的是对象本身,也就是说会存在两个对象【1,2,3】

深拷贝的目的是需要改变原始对象中的数据,但是又要保留原来的那一份

所以可以深拷贝出来一个副本,修改副本就不会影响到原本

浅拷贝是将对象的引用复制给另一个对象。因此,如果我们在副本中进行更改,则会影响原对象。使用 copy()函数进行浅拷贝

浅拷贝拷贝的是引用,a=[1,2,3],b=a

那么a和b同时指向的是一个对象即【1,2,3】

一般而言没有特殊的必要,python默认浅拷贝,除非原始数据对象需要保存

2、Python 中如何实现多线程?

多线程类似于同时执行多个不同程序;

Python中使用线程有两种方式:函数或者用类来包装线程对象。

函数式:调用thread模块中的start_new_thread()函数来产生新线程,语法: thread.start_new_thread ( function, args[, kwargs] ),

其中

function - 线程函数。

args - 传递给线程函数的参数,他必须是个tuple类型。

kwargs - 可选参数。

使用Threading模块创建线程

使用Threading模块创建线程,直接从threading.Thread继承,然后重写__init__方法和run方法。

线程是轻量级的进程,多线程允许一次执行多个线程。众所周知,Python 是一种多线程语言,它有一个多线程包。

GIL(全局解释器锁)确保一次执行单个线程。一个线程保存 GIL 并在将其传递给下一个线程之前执行一些操作,这就产生了并行执行的错觉。但实际上,只是线程轮流在 CPU 上。当然,所有传递都会增加执行的开销。

3、Python的魔法方法是什么?__new__和__init__的区别是什么?

参考答案:

Python中的魔法方法是指可以给我们的类增加魔力的特殊方法。如果对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被调用。它们经常是双下划线包围来命名的(比如:__init__)。

__new__:用来创建一个雷的实例(constructor)。

__init__:用来初始化一个实例(initializer)。

__new__:接收的第一个参数是cls。

__init__:接收的第一个参数是self。

__init__是在__new__之后被调用的。

__init__不能有返回值。__new__可以直接返回其他类的实例。

4、测试中的“杀虫剂怪事”是指什么?

参考答案:

“杀虫剂怪事”一词由BorisBeizer在其编著的《软件测试技术》第二版中提出。用于描述测试人员对同一测试对象进行的测试次数越多,发现的缺陷就会越来越少的现象。就像老用一种农药,害虫就会有免疫力,农药发挥不了效力。这种现象的根本原因就是测试人员对测试软件过于熟悉,形成思维定势。

为了克服这种现象,测试人员需要不断编写新的测试程序或者测试用例,对程序的不同部分进行测试,以发现更多的缺陷。也可以引用新人来测试软件,刚刚进来的新手往往能发现一些意想不到的问题。

5、简述负载测试与压力测试的区别?

参考答案:

压力测试(Stress Testing)

压力测试的主要任务就是获取系统正确运行的极限,检查系统在瞬间峰值负荷下正确执行的能力。例如,对服务器做压力测试时就可以增加并发操作的用户数量;或者不停地向服务器发送请求;或一次性向服务器发送特别大的数据等。看看服务器保持正常运行所能达到的最大状态。人们通常使用测试工具来完成压力测试,如模拟上万个用户从终端同时登录,这是压力测试中常常使用的方法。

负载测试(Volume Testing)

用于检查系统在使用大量数据的时候正确工作的能力,即检验系统的能力最高能达到什么程度。例如,对于信息检索系统,让它使用频率达到最大;对于多个终端的分时系统,让它所有的终端都开动。在使整个系统的全部资源达到“满负荷”的情形下,测试系统的承受能力。

6、配置和兼容性测试的区别是什么?

参考答案:

配置测试的目的是保证软件在其相关的硬件上能够正常运行,而兼容性测试主要是测试软件能否与不同的软件正确协作。

配置测试的核心内容就是使用各种硬件来测试软件的运行情况,一般包括:

(1)软件在不同的主机上的运行情况,例如Dell和Apple;

(2)软件在不同的组件上的运行情况,例如开发的拨号程序要测试在不同厂商生产的Modem上的运行情况;

(3)不同的外设;

(4)不同的接口;

(5)不同的可选项,例如不同的内存大小;

兼容性测试的核心内容:

(1)测试软件是否能在不同的操作系统平台上兼容;

(2)测试软件是否能在同一操作系统平台的不同版本上兼容;

(3)软件本身能否向前或者向后兼容;

(4)测试软件能否与其它相关的软件兼容;

(5)数据兼容性测试,主要是指数据能否共享;

配置和兼容性测试通称对开发系统类软件比较重要,例如驱动程序、操作系统、数据库管理系统等。具体进行时仍然按照测试用例来执行。

7、描述TCP/IP协议的层次结构,以及每一层中重要协议

8、用Python实现一个二分查找的函数?

参考答案:

方法不唯一:

def binary_search(li, val):

    """

    二分查找

    :param li: 输入的列表(从小到大排序的列表)

    :param val: 输入的待查找的值

    :return:

    """

    left = 0

    right = len(li) - 1

    while left < right:   # 候选区有值

        mid = (left + right) // 2   # 整除得到mid的下标

        if li[mid] == val:

            return mid   # 找到待查找的值

        elif li[mid] > val:

            # 待查找的值在mid左侧

            right = mid - 1   # 更新候选区为之前的左候选区

        else:

            left = mid + 1    # 更新候选区为之前的右候选区

    else:

        # 找不到待查找的值

        return None

li = [1, 2, 3, 4, 5, 6, 7, 8, 9]

print(binary_search(li, 3))    # 2

9、selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?

参考答案:

1.首先通过封装find方法,实现wait_for_element_ispresent(WebDriverWait)

2.在对页面进行click之前,先滚动到该元素(通过Js封装),避免在页面未加载完成前或是在下拉之后才能显示。

3.不同方式进行定位,与expected_conditions判断方法封装,循环判断页面元素出现后再操作;

4.开发人员规范开发习惯,如给页面元素加上唯一的name,id等。

10、如何提高selenium脚本的执行速度?

参考答案:

1.优化测试用例。设置等待时间的时候,少用sleep,尽量不用implicitly_wait,多用显式等待方法;

2.减少不必要的操作步骤。如经过三四步才能打开要测试的页面的话,可以直接通过网址来打开;

3.中断页面加载。如果加载的内容不影响我们测试,就设置超时时间,中断页面加载;

4.使用Selenium grid,通过testNG实现并发执行。 在编写测试用例的时候,实现松耦合,然后再服务器允许的情况下,尽量设置多线程实现并发运行。

11、用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性?

参考答案:

1.在经常检测失败的元素前尽量加上显式等待时间,等要操作的元素出现之后再执行下面的操作;

2.多线程的时候,减少测试用例耦合度,因为多线程的执行顺序是不受控制的;

3.多用 try 捕捉,处理异常;

4.尽量使用测试专用环境,避免其他类型的测试同时进行,对数据造成干扰。

12、如何设计高质量自动化脚本

参考答案:

1.使用四层结构实现业务逻辑、脚本、数据分离。

2.使用PO设计模式,将一个页面用到的元素和操作步骤封装在一个页面类中。如果一个元素定位发生了改变,我们只用修改这个页面的元素属性

3.对于页面类的方法,我们尽量从客户的正向逻辑去分析,方法中是一个独立场景,例如:登录到退出,而且不要想着把所有的步骤都封装在一个方法中。

4 测试用例设计中,减少测试用例之间的耦合度。

13、你的自动化用例的执行策略是什么?

参考答案:

1.自动化测试用例是用来监控的。集成到jenkins,创建定时任务定时执行;

2.有些用例在产品上线前必须回归。jenkins上将任务绑定到开发的build任务上,触发执行;

3.有些用例不需要经常执行。jenkins创建一个任务,需要执行的时候人工构建即可。

14、Selenium有几种定位方式?你最偏爱哪一种,为什么?

Selenium有八种定位方式:

与name有关的有三种:name、class_name、tag_name

与link相关的有两种:link_text、partitial_link_text

与id有关:id

全能选手:xpath、css_selector

如果存在id,我一定使用Id,因为简单方便,定位最快。其次是Xpath,因为很多情况下html标签的属性不够规范,无法唯一定位。Xpath是通过相对位置定位

如果没有,那么CSS定位器应该被优先考虑,因为在大多数现代浏览器中,它们的评估速度比XPath更快。

15、如何去定位属性动态变化的元素?

先去找该元素不变的属性,要是都变,那就找不变的父元素,用层级定位(以不变应万变)

属性动态变化也就是指该元素没有固定的属性值,可以通过:

JS实现,

通过相对位置来定位,比如xpath的轴,paren/following-sibling/percent-sibling

XPath学习:轴(8)——following-sibling - Asharp - 博客园

16、点击链接以后,selenium是否会自动等待该页面加载完毕?

不会的。所以有的时候,当selenium并未加载完一个页面时再请求页面资源,则会误报不存在此元素。所以首先我们应该考虑判断,selenium是否加载完此页面。其次再通过函数查找该元素。

17、webdriver client的原理是什么?

在selenium启动以后,driver充当了服务器的角色,跟client和浏览器通信,client根据webdriver协议发送请求给driver。driver解析请求,并在浏览器上执行相应的操作,并把执行结果返回给client.

18、什么是page object设计模式?

1.通俗来讲,把每个页面当成一个页面对象,页面层写定位元素方法和页面操作方法

2.用例层从页面层调用操作方法,写成用例

3.可以做到定位元素与脚本的分离

19、 怎样去选择一个下拉框中的value=xx的option?

1.select类里面提供的方法:select_by_value(“xxx”)

2.xpath的语法也可以定位到

20、 什么是断言和验证?

断言(assert):测试将会在检查失败时停止,并不运行后续的检查

优点:可以直截了当的看到检查是否通过

缺点:检查失败后,后续检查不会执行,无法收集那些检查结果状态

验证(vertify):将不会终止测试

缺点:你必须做更多的工作来检查测试结果:查看日志——>耗时多,所以更偏向于断言

21、 get和post 的区别?

1、GET请求:请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。

POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。

2、传输数据的大小

使用GET请求时,传输数据会受到URL长度的限制。

对于POST,理论上是不会受限制的

3、安全性。POST的安全性比GET的高


http://www.ppmy.cn/devtools/128237.html

相关文章

rootless模式下测试istio Ambient功能

前置需求 rootless k8s测试环境搭建&#xff1a;https://blog.csdn.net/longtds/article/details/142916697 istio Ambient istio安装 通过加速下载istio release包&#xff0c;解压并安装为ambient模式 wget https://mirror.ghproxy.com/https://github.com/istio/istio/r…

ESP32-S3学习笔记:分区表(Partition Table)的二进制分析

目录 一、参考资料 二、准备工作 三、开始分析 一、参考资料 用于研究的官方示例代码&#xff1a;esp-idf-v5.3\examples\storage\partition_api\partition_find参考的官方文档&#xff1a;ESP-IDF编程指南&#xff1a;分区表 二、准备工作 用VS Code打开示例代码&#xf…

Java最全面试题->Java基础面试题->JavaSE面试题->面向对象面试题

文章目录 面向对象1.面向对象和面向过程的区别2.面向对象有哪些特性3.多态的实现机制4.Java语言有哪些特点5.JDK、JRE、JVM三者的联系和区别 面向对象 下边是我自己整理的面试题&#xff0c;基本已经很全面了&#xff0c;想要的可以私信我&#xff0c;我会不定期去更新思维导图…

C++中的vector使用与实现

一、vector的使用 1.1 vector的定义 是一种类模板 template < class T, class Alloc allocator<T> > class vector; 其中的模板参数Alloc是在使用空间配置器&#xff08;内存池&#xff09;&#xff0c;并给了缺省值&#xff0c;暂时不深究 1.2遍历方式 1.…

12、论文阅读:SpikeYOLO:高性能低能耗目标检测网络

SpikeYOLO:高性能低能耗目标检测网络 前言解释介绍相关工作论文提出的方法网络输入SpikeYOLO架构概述网络输出宏观设计微观设计I-LIF脉冲神经元LIFI-LIF实验代码前言 脉冲神经网络(Spiking Neural Networks, SNNs)具有生物合理性和低功耗的优势,相较于人工神经网络(Artif…

毕设项目分享 深度学习动物识别系统(源码+论文)

文章目录 0 前言1 项目运行效果1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 …

每日一题——第一百一十七题

题目&#xff1a;使用二分查找&#xff0c;查找一个数是否存在于一个升序数组中 #include <stdio.h>int binarySearch(int arr[], int length, int elem);int main() {int arr[] { 2, 3, 4, 5, 6, 7, 8, 9, 10 };int key;int length sizeof(arr) / sizeof(arr[0]);pri…

Vue预渲染:深入探索prerender-spa-plugin与vue-meta-info的联合应用

在前端开发的浪潮中&#xff0c;Vue.js凭借其轻量级、易上手和高效的特点&#xff0c;赢得了广大开发者的青睐。然而&#xff0c;单页面应用&#xff08;SPA&#xff09;在SEO方面的短板一直是开发者们需要面对的挑战。为了优化SEO&#xff0c;预渲染技术应运而生&#xff0c;而…