2023年6月29日发(作者:)
python⾃动化测试⾯试题代码_⾃动化测试开发⾯试题(⼀)1、unitTest的原理:⼀个TestCase的实例就是⼀个测试⽤例。什么是测试⽤例呢?就是⼀个完整的测试流程,包括测试前准备环境的搭建(setUp),执⾏测试代码(run),以及测试后环境的还原(tearDown)。元测试(unit test)的本质也就在这⾥,⼀个测试⽤例是⼀个完整的测试单元,通过运⾏这个测试单元,可以对某⼀个问题进⾏验证。⽽多个测试⽤例集合在⼀起,就是TestSuite,⽽且TestSuite也可以嵌套TestSuite。TestLoader是⽤来加载TestCase到TestSuite中的,其中有⼏个loadTestsFrom__()⽅法,就是从各个地⽅寻找TestCase,创建它们的实例,然后add到TestSuite中,再返回⼀个TestSuite实例。TextTestRunner是来执⾏测试⽤例的,其中的run(test)会执⾏TestSuite/TestCase中的run(result)⽅法。测试的结果会保存到TextTestResult实例中,包括运⾏了多少测试⽤例,成功了多少,失败了多少等信息。⽽对⼀个测试⽤例环境的搭建和销毁,是⼀个fixture。unitest的⼯作原理通过unittest类调⽤分析,可将框架的⼯作流程概况如下:编写TestCase,由TestLoader加载TestCase到TestSuite,然后由TextTestRunner来运⾏TestSuite,最后将运⾏的结果保存在TextTestResult中。2、Python是如何进⾏内存管理的?Python引⽤了⼀个内存池(memory pool)机制,即Pymalloc机制(malloc:n.分配内存),⽤于管理对⼩块内存的申请和释放内存池(memory pool)的概念:当 创建⼤量消耗⼩内存的对象时,频繁调⽤new/malloc会导致⼤量的内存碎⽚,致使效率降低。内存池的概念就是预先在内存中申请⼀定数量的,⼤⼩相等 的内存块留作备⽤,当有新的内存需求时,就先从内存池中分配内存给这个需求,不够了之后再申请新的内存。这样做最显著的优势就是能够减少内存碎⽚,提升效率。内存池的实现⽅式有很多,性能和适⽤范围也不⼀样。python中的内存管理机制——Pymalloc:python中的内存管理机制都有两套实现,⼀套是针对⼩对象,就是⼤⼩⼩于256bits时,pymalloc会在内存池中申请内存空间;当⼤于256bits,则会直接执⾏new/malloc的⾏为来申请内存空间。关于释放内存⽅⾯,当⼀个对象的引⽤计数变为0时,python就会调⽤它的析构函数。在析构时,也采⽤了内存池机制,从内存池来的内存会被归还到内存池中,以避免频繁地释放动作。3、如何结束⼀个进程?答:(1)调⽤ terminate ⽅法。(2)使⽤ subProcess 模块的 Popen ⽅法。使⽤简单,具体⽤法,这⾥不展开。4、说说接⼝测试的流程,介绍⼀下request有哪些内容。答:(1)流程:获取接⼝⽂档,依据⽂档设计接⼝参数,获取响应,解析响应,校验结果,判断测试是否通过。(2)request 内容:① 封装了各种请求类型,get、post 等;② 以关键字参数的⽅式,封装了各种请求参数,params、data、headers、token 等;③ 封装了响应内容,status_code、json()、cookies、url 等;④ session 会话对象,可以跨请求。5、UI ⾃动化,如何做集群?答: Selenium Grid。6、介绍⼀下你在这个项⽬中是如何使⽤ Jenkins 的答:⽐如定时构建执⾏代码7、python列表和字典有什么区别?答: ⼀般都是问列表和元组有什么不同。(1)获取元素的⽅式不同。列表通过索引值获取,字典通过键获取。(2)数据结构和算法不同。字典是hash算法,搜索的速度特别快。(3)占⽤的内存不同。8、事件处理:*下拉菜单中如何去选择⼀个菜单项?答:如果下拉菜单是select标签,使⽤⽅法:*如何处理alert弹窗?答:处理alert弹窗⾸先需要先跳转到alert上,然后在点击确定或者取消按钮,Alert alet=To().alert();//切换到alert*如何⽤webdriver进⾏⿏标右键点击操作?答:使⽤Actions类9、Bug 定位、分析、类型。10、Selenium的核⼼Selenium Core基于JsUnit,完全由JavaScript编写,因此可以⽤于任何⽀持JavaScript的浏览器上。selenium可以模拟真实浏览器,⾃动化测试⼯具,⽀持多种浏览器,爬⾍中主要⽤来解决JavaScript渲染问题。11、Selenium查找元素:通过2种不同的⽅式去获取响应的元素,第⼀种是通过id的⽅式,第⼆个中是CSS选择器,结果都是相同的。Selenium查找定位元素:---WebDriver提供了多种多样的find_element_by⽅法在⼀个⽹页⾥⾯查找元素。---ID、class name等---XPath进⾏查找XPath是⼀种在XML⽂档中搜索和定位节点node的⼀种查询语⾔。所有的主流Web浏览器都⽀持XPath。Selenium2可以⽤强⼤的XPath在页⾯中查找元素。常⽤的XPath的⽅法有starts-with(),contains()和ends-with()等----CSS选择器进⾏查找CSS是⼀种设计师⽤来描绘HTML⽂档的视觉的层叠样式表。12、4、如何提⾼selenium脚本的执⾏速度?Selenium脚本的执⾏速度受多⽅⾯因素的影响,如⽹速,操作步骤的繁琐程度,页⾯加载的速度,以及我们在脚本中设置的等待时间,运⾏脚本的线程数等。所以不能单⽅⾯追求运⾏速度的,要确保稳定性,能稳定地实现回归测试才是关键。我们可以从以下⼏个⽅⾯来提⾼速度:⼀,减少操作步骤,如经过三四步才能打开我们要测试的页⾯的话,我们就可以直接通过⽹址来打开,减少不必要的操作。⼆,中断页⾯加载,如果页⾯加载的内容过多,我们可以查看⼀下加载慢的原因,如果加载的内容不影响我们测试,就设置超时时间,中断页⾯加载。三,在设置等待时间的时候,可以sleep固定的时间,也可以检测某个元素出现后中断等待也可以提⾼速度。四,配置testNG实现多线程。在编写测试⽤例的时候,⼀定要实现松耦合,然后在服务器允许的情况下,尽量设置多线程运⾏,提⾼执⾏速度。13、什么是断⾔?-断⾔的英⽂是assertion,断⾔检查的英⽂是assertion checking。-断⾔是指定⼀个程序必须已经存在的状态的⼀个逻辑表达式,或者⼀组程序变量在程序执⾏期间的某个点上必须满⾜的条件。14、python安装 Selenium ⼯具包安装好的 Python 默认有 pip Python 包管理⼯具,可以通过 pip ⾮常⽅便的安装Selenium。启动命令⾏⼯具:Win+R | 输⼊ cmd | 回车输⼊命令:pip install selenium15、Selenium WebDriver API 的使⽤16、Selenium控制浏览器也是⾃动化测试的⼀个基本组成部分,我们可以将浏览器最⼤化,设置浏览器的⾼度和宽度以及对浏览器进⾏导航操作等。17、使⽤unittest需要以下简单的三步:引⼊unittest模组继承se基类测试⽅法以test开头18、Page Object模式是Selenium中的⼀种测试设计模式,主要是将每⼀个页⾯设计为⼀个Class,其中包含页⾯中需要测试的元素(按钮,输⼊框,标题等),这样在Selenium测试页⾯中可以通过调⽤页⾯类来获取页⾯元素,这样巧妙的避免了当页⾯元素id或者位置变化时,需要改测试页⾯代码的情况。当页⾯元素id变化时,只需要更改测试页Class中页⾯的属性即可。*它的好处如下:集中管理元素对象,便于应对元素的变化集中管理⼀个page内的公共⽅法,便于测试⽤例的编写后期维护⽅便,不需要重复的复制和修改代码*具体的做法如下:创建⼀个页⾯的类在类的构造⽅法中,传递 WebDriver 参数。在测试⽤例的类中,实例化页⾯的类,并且传递在测试⽤例中已经实例化的WebDriver对象。在页⾯的类中,编写该页⾯的所有操作的⽅法在测试⽤例的类中,调⽤这些⽅法19、什么是数据驱动测试:通过 CSV ⽂件 或者 MySQL 数据库,是主流的数据驱动⽅式。主要的数据驱动⽅式有两种:a、通过 ⽂本⽂件或者 Excel ⽂件存储数据,并通过程序读取数据,遍历所有的⾏b、通过数据库存储数据,并通过程序和 SQL 脚本读取数据,遍历所有的⾏*具体的步骤:1、python的字典类型 dict 类型2、python的读写⽂件3、python的读写数据库4、for循环5、注意资源的释放6、关闭数据库游标和连接7、关闭⽂件*测试⽅案的编码实现 测试⼊⼝ 测试运⾏器cases 测试⽤例pages 测试页⾯base 底层封装与驱动*测试报告:HTML 测试报告的⽣成HTML测试报告需要引⼊HTMLTestRunner20、jenkins你都⽤了哪些插件?⽐如:ssh remote hosts 这个可以在远程服务器上⾯执⾏脚本。Role Strategy Plugin ⽤来精细化管理权限。SCM: 除CVS和Subversion外需要实现与源代码控制系统⽀持的插件。 3 L1 O# q2 R& _+ U3 BTriggers: 事件监听并触发构建的插件。例如,URL改变触发器将监控⼀个URL;当地址内容发⽣改变,这个触发器就将执⾏⼀次作业。Build tools: 实现额外构建⼯具的插件,如MSBuild和Rake。如果您想在Hudson中构建⾮Java的软件时这些就特别有⽤。Build wrappers: 通常涉及时执⾏在受控制的构建过程本⾝之前和之后事件的插件。例如, VMware插件将在构建之前启动⼀个客户虚拟机,建⽴和然后在构建完成后关闭它。这在您可能需要访问VM以执⾏单元测试的情况下是⾮常有⽤的。21、Jmeter:Apache JMeter是Apache组织开发的基于Java的压⼒测试⼯具。⽤于对软件做压⼒测试,它最初被设计⽤于Web应⽤测试,但后来扩展到其他测试领域。 它可以⽤于测试静态和动态资源,例如静态⽂件、Java ⼩服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以⽤于对服务器、⽹络或对象模拟巨⼤的负载,来⾃不同压⼒类别下测试它们的强度和分析整体性能。另外,JMeter能够对应⽤程序做功能/回归测试,通过创建带有断⾔的脚本来验证你的程序返回了你期望的结果。为了最⼤限度的灵活性,JMeter允许使⽤正则表达式创建断⾔。22、 如何使⽤Jmeter进⾏并发测试步骤概述:编写脚本;使⽤ JMeter 进⾏本地测试;BlazeMeter 沙箱测试;使⽤⼀个控制台和⼀个引擎,设置每个引擎的⽤户数量;设置和测试集群(⼀个控制台和 10 到 14 个引擎);使⽤主从功能达到最⼤并发量⽬标。23、unintest创建⼀个suite集合def suite():#创建⼀个suite集合;suite = ite()# 该⽅法是添加该类下的⼀个测试⽤例t(TestUnit("test_case2"))# 该⽅法添加该类下的所有测试⽤例;t(ite(TestUnit2))return suite24、加载测试模块'''加载测试模块来执⾏(TestLoader)'''if name == 'main':suite=ader().loadTestsFromModule(BaiduLink)# suite=ader().loadTestsFromModule("")stRunner(verbosity=2).run(suite)
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1687987422a64165.html
评论列表(0条)