python理论

python知识

    1、元素定位的几种方式?
     
         1.根据标签名(Tag Name):通过元素的HTML标签名来定位元素。例如,通过<div>标签名找到一个<div>元素。

         2.根据ID属性(ID Attribute):通过元素的ID属性值来定位元素。ID在页面中应该是唯一的,因此可以用来准确定位一个元素。
             例如,通过<div id="myDiv">来找到ID为"myDiv"的<div>元素。

         3.根据类名(Class Name):通过元素的类名来定位元素。类名可以用于选择具有相同类名的一个或多个元素。
             例如,通过<div class="myClass">来定位类名为"myClass"的<div>元素。

         4.根据CSS选择器(CSS Selector):使用CSS选择器来定位元素。CSS选择器提供了丰富的选择能力,可以根据元素的标签名、ID、类名、属性等来定位元素。
             例如,使用div#myDiv.myClass选择具有ID为"myDiv",类名为"myClass"的<div>元素。

         5.根据链接文本(Link Text):通过链接的文本内容来定位链接元素。例如,通过链接的可见文本找到<a>标签元素。

         6.根据部分链接文本(Partial Link Text):通过链接的部分可见文本来定位链接元素。例如,通过链接的部分文本找到<a>标签元素。

         7.根据XPath表达式(XPath Expression):使用XPath语法定位元素。XPath提供了强大的定位能力,可以根据元素的层级关系、属性、文本内容等来定位元素。
             例如,通过//div[@id="myDiv"]来定位ID为"myDiv"的<div>元素。

         8.根据自定义属性(Custom Attribute):使用元素的自定义属性来定位元素。自定义属性是指用户自定义添加到元素上的属性。
             例如,通过<div data-custom="myData">来定位具有自定义属性"data-custom"值为"myData"的<div>元素。
         
         
     2、元素定位不到造成原因,解决办法?
     
        1.可能元素加载未完成元素加载没完成,同样的路径定位,每次测试结果确是不一样的,有时候抛出错误,有时候正常!
             而很大程度上取决于你的电脑和网速!
             
             页面加载超时或网络问题:若网络不稳定或页面加载时间过长,可能会导致元素定位失败。可以尝试刷新页面或检查网络连接,确保页面能够正常加载。
             元素还未加载完成:如果元素是通过异步加载的,可能会导致定位失败。解决办法是等待元素加载完成再进行定位,可以使用显式等待或者延时等待来处理。
             
            解决:
             确保元素加载完成后再进行定位,可以使用显式等待或延时等待的方法。
             
        2.元素嵌套在iframe中
            注:首先要理解下frame的实质,frame中实际上是嵌入了另一个页面,而webdriver每次只能在一个页面识别,
               因此需要先定位到相应的frame,对那个页面里的元素进行定位。
               
            1,切换到iframe中:driver.switch_to.frame(’ iframe的id或name值 ');
            2,再进行元素定位
             示例:
                 #先定位到iframe
                     elementi= driver.find_element_by_class_name('APP-editor-iframe')
                 #再将定位对象传给switch_to_frame()方法
                     driver.switch_to_frame(elementi) 
        
        3.页面元素是动态的
          3.1怎么判断元素是否是动态?
                 首先应先确定时间等待没问题、且没有打开新页面、没有alert、没有frame,元素可见或可点击
            此时最有可能的原因就是元素是动态的,元素动态有分两种:
             a.元素的属性是动态的
                 可以尝试刷新一下网页查看该元素前后有没有变化,如果属性值改变了,即是动态属性了,较为常见的是元素的id属性,或class属性里有拼接一串数字的,就很有可能是动态元素了,
             b.元素的位置是动态的
                 有些元素是因为某些框架技术自动生成的动态元素
            1.根据其他静态属性定位;
            2.根据元素属性值模糊匹配定位。
             
        4.页面元素不可见或不可点击
             1,使用JavaScript实现元素定位和动作执行;
             2,使用鼠标事件ActionChains来操作;
             3,如果是被伪元素遮挡了原本的元素,可以直接定位到伪元素上进行点击操作
             
             
    3、Python常见的数据类型

         1.数字(number):表示整数,例如:1、-5、100等。

         2.字符串(str):表示文本数据,用引号(单引号或双引号)括起来的一串字符,例如:“Hello”、'World’等。

         3.列表(list):表示一组有序的元素,可以包含不同类型的数据,用方括号[ ]括起来,元素之间使用逗号分隔,例如:[1, ‘apple’, True]。
             Python中列表(list)有许多内置函数和方法可以使用
             1. append():在列表末尾添加一个元素。
               my_list = [1, 2, 3]
               my_list.append(4)
               print(my_list)  # 输出[1, 2, 3, 4]

             2. insert():在指定的位置插入一个元素。
               my_list = [1, 2, 3]
               my_list.insert(1, 'apple')
               print(my_list)  # 输出[1, 'apple', 2, 3]

             3. remove():删除列表中的一个元素。
                my_list = [1, 'apple', 2, 3]
                my_list.remove('apple')
                print(my_list)  # 输出[1, 2, 3]

             4. pop():删除列表中指定位置的元素,并返回被删除的元素。
                my_list = [1, 2, 3]
                removed_element = my_list.pop(1)
                print(my_list)  # 输出[1, 3]
                print(removed_element)  # 输出2

         4.元组(tuple):与列表类似,但是元组是不可变的,在创建后不允许修改,用圆括号( )括起来,元素之间使用逗号分隔,例如:(1, ‘apple’, True)。
              注:tuple 与 list 的唯一区别是 tuple 的元素是不能修改,而 list 的元素可以修改

         5.集合(set):表示一组唯一的元素,不允许重复,用大括号{ }或set()函数创建,例如:{1, 2, 3}或set([1, 2, 3])。

         6.字典(dict):表示键值对的集合,每个键和值之间使用冒号分隔,键值对之间使用逗号分隔,用大括号{ }或dict()函数创建,例如:{‘name’: ‘Alice’, ‘age’: 25}。

    4、性能测试指标有哪些,说出这个判断的依据,
         注:比如说以百分之多少为节点来判断它这个性能测试的是有效的还是无效的嘛
         (性能测试那些指标数据会银影响系统性能)


         1. 响应时间(Response Time):系统或应用程序从接收请求到返回响应的时间。较低的响应时间表示系统的相应速度较快。

         2. 吞吐量(Throughput):系统或应用程序单位时间内处理的请求数量或事务数量。较高的吞吐量表示系统的处理能力较大。

         3. 并发用户数(Concurrent Users):同时访问系统或应用程序的用户数量。较高的并发用户数要求系统的并发处理能力高。

         4. 资源利用率(Resource Utilization):系统或应用程序使用的计算资源(如CPU、内存、磁盘等)的利用率。较低的资源利用率表示系统的性能效率较高。

         5. 扩展性(Scalability):系统或应用程序在增加负载或并发用户时的性能表现。具有良好扩展性的系统能够保持稳定的性能。

         6. 崩溃测试(Stress Testing):通过超过系统处理能力范围的负载或并发来测试系统的稳定性。观察系统是否崩溃或响应时间是否显著增加。

         7. 稳定性(Stability):系统或应用程序在长时间运行或高负载条件下的性能表现。稳定性测试可以验证系统是否能够持续稳定地运行。
         
     4.1性能测试中的指标数据可以影响系统性能的因素:

         1.响应时间:较长的响应时间会使用户感到系统响应速度慢,可能导致用户流失或降低用户体验。较短的响应时间可以提升系统的性能和用户满意度。

         2.吞吐量:较低的吞吐量意味着系统处理能力不足,可能导致请求堆积或延迟。较高的吞吐量则表示系统能够更快地处理请求,提高整体性能。

         3.并发用户数:较高的并发用户数要求系统能够同时处理多个请求,如果系统的并发处理能力不足,可能导致延迟、拒绝请求或系统崩溃。

         4.资源利用率:如果系统的资源利用率过高,可能会导致性能下降甚至系统崩溃。优化资源利用率可以提高系统的性能和效率。

         5.崩溃测试:当系统无法处理超出其处理能力范围的负载时,可能导致系统崩溃、响应时间大幅增加或请求失败。稳定的系统应能够承受峰值负载而不崩溃。
         
    
    5、GET请求和POST请求是HTTP协议中两种常见的请求方法,它们在以下几个方面有明显的区别:

         1.数据传输位置:GET请求通过URL的查询参数传输数据,数据附加在URL后面,
              例如:http://example.com/api?param1=value1&param2=value2。而POST请求通过请求的正文传输数据,数据被包含在请求的正文中。

         2.数据长度限制:GET请求对URL的长度有限制,不同浏览器和服务器对URL的长度限制可能不同,一般约为2000个字符左右。
           而POST请求对数据长度没有特定限制,可以传输大量数据。

         3.安全性:GET请求对请求参数和数据的可见性较高,因为数据直接附加在URL中,容易被拦截和查看。而POST请求的数据在请求的正文中,相对更安全,不会在URL中暴露。

         4.数据语义:GET请求主要用于获取资源,即多次请求结果相同,不会有副作用。
           POST请求主要用于创建或修改资源,即多次请求可能会有不同的结果或产生副作用。

         5.缓存:GET请求可以被浏览器缓存,因为相同的GET请求结果应该是不变的。
           而POST请求默认不被缓存,因为每次POST请求可能有不同的结果。

        综上所述:GET请求适合用于获取数据,对数据有长度限制,数据相对较不安全,可以被缓存
         POST请求适合用于修改或创建数据,没有长度限制,数据相对较安全,不被缓存
         在选择使用GET或POST请求时,需要根据接口设计的要求和业务逻辑来确定。
         
    6、Python中前置和后置以及类前置和类后置区别
         
        1.前置(setup)和后置(teardown)方法:
             前置方法(一般命名为setup)在每个测试方法(或用例)执行之前运行,用于准备测试环境,例如创建对象、建立数据库连接等。
             后置方法(一般命名为teardown)在每个测试方法执行完毕后运行,用于清理测试环境,例如释放资源、关闭连接等。
             
          前置和后置方法都是针对每个测试方法的执行,每个测试方法都会有对应的前置和后置方法执行。

        2.类前置(classmethod setup)和类后置(classmethod teardown)方法:
             类前置方法(使用@classmethod装饰器修饰,一般命名为setup_class)在类中任何测试方法执行之前执行,用于设置类级别的准备工作,例如创建实例或加载测试数据。
             类后置方法(使用@classmethod装饰器修饰,一般命名为teardown_class)在类中所有测试方法执行完毕后执行,用于清理类级别的环境,例如关闭连接、删除临时文件等。
             
          类前置和类后置方法在整个类的测试过程中只执行一次,不管类中有多少个测试方法,都只有一个类前置和类后置方法。

        通过使用前置和后置方法,可以确保测试环境的一致性,并在测试开始和结束时执行必要的操作。
         类前置和类后置方法更适用于执行类级别的准备和清理工作,例如在一个测试类中多个测试方法共享同一个实例或资源。
         
         
    7、python自动化接口是怎么做的,用到什么依赖库

         1.requests:用于发送HTTP请求,可以使用GET、POST、PUT、DELETE等请求方法,并且方便处理请求头、请求体、参数等信息。

         2.unittest或pytest:用于编写和执行测试用例,断言和验证接口的响应数据和状态码。

         3.json或xml:用于解析接口返回的JSON或XML格式的响应数据,提取字段信息进行断言和验证。

         4.logging:用于记录日志,方便调试和查看测试过程中的信息。

         5.Jenkins等持续集成工具:用于集成和自动化运行接口测试,并生成测试报告和执行结果。

         6.Allure、pytest-html等工具:用于生成漂亮且可读性强的测试报告,方便查看测试结果和分析问题。

         7.PyYAML:用于解析和处理YAML格式的配置文件,方便管理接口的URL、请求体、参数等信息。
          
    8、python接口自动化中,接口依赖码那个字段是怎么提取出来的
    
         1.使用编程语言的JSON解析库:如果接口返回的数据是JSON格式,可以使用编程语言(如Python、Java等)中的JSON解析库来解析响应数据,并提取需要的字段。
           通过指定JSON中的路径或键,可以轻松地获取字段的值。

         2.使用正则表达式:在某些情况下,响应数据可能是文本或字符串形式,可以使用正则表达式进行匹配和提取字段值。通过编写适当的正则表达式来匹配所需字段,并提取匹配结果。

         3.使用第三方工具或库:有许多第三方工具和库可以帮助提取接口响应中的字段,如JMESPath、JsonPath等。这些工具提供了一种简便的方式来指定字段路径并提取值。
         
        示例:
         在处理之前,token灵魂三连问:


        思路如下:
         1.抽取登录接口返回值中的token;
         2.使用全局变量存储token。token可以存到yaml或者json或者ini的配置文件里,以下介绍将token作为类属性;
         3.其他接口将token值放入请求头,发送请求;
         两种方案:
         定义一个全局变量来共享
         通过当前测试用例类的类属性共享
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,311评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,339评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,671评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,252评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,253评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,031评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,340评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,973评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,466评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,937评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,039评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,701评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,254评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,259评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,497评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,786评论 2 345

推荐阅读更多精彩内容