作业(3)

零基础测试开发考核体系:

Python知识:

1、字典排序使用到的函数具体是哪个?举例说明

#先创建一个字典 dict{'key':'value','key':'value',.......}
dict1={'name':'lyl','age':'18'}
#sorted()默认是对字典的键,对所有对象进行排序操作,从小到大进行排序,这个单词本身就是排序的意思
print('根据key值排序:',dict(sorted(dict1.items(),key=lambda item:item[0])))
print('根据value值排序:',dict(sorted(dict1.items(),key=lambda item:item[1])))

  结果如下图:

 

2、字符串格式化使用到的关键字是哪个,举例说明

 format()接受不限个参数,位置可以不按顺序

例一:
site1 = {"name": "admin", "passwd": "123456"}
print("用户名:{name},密码:{passwd}".format(**site1))

  结果如下图:

 例二:

username=input("请输入用户名:\n")
age=int(input("请输入年龄:\n"))
print('my name is {0},and my age is {1}'.format(username,age))
print('my name is {username},and my age is {age}'.format(username=username,age=age))

      结果如下图:

3、列表中append()与insert()的区别是什么?举例说明

      append()是向列表的最后一位添加元素list1.append('value')

list1=[2,6,'ok',9,'你好','啊']
list1.append('嘿嘿')
print(list1)

  结果如下图:

     insert是按照索引位给列表添加元素.list1.insert(索引位,’value‘)

list1=[2,6,'ok',9,'你好','啊']
list1.insert(4,'哈哈')
print(list1)

       结果如下图:

 4、列表与元组的区别是什么

 list列表是可变的,而tuple刚好是不可变的,

5、查看一个对象的类型关键字是什么?查看对象的内存地址关键字是什么

    查看一个对象的关键字是type()

    查看对象的内存地址关键字是id()

6、怎么获取字符串的索引信息

str4="hi abcd"
print("获取a的索引信息:",str4[4])

  结果如下图:

7、举例说明列表推导式的使用

      列表推导式书写形式:[表达式 for 变量 in 列表]    或者  [表达式 for 变量 in 列表 if 条件]

list2 = [item for item in range(10) if item > 4]
print(list2)

  结果如下图:

 

8、当元组只有一个对象的时候,需要注意什么?

     当tuple里面的对象并且只有一个的时候,记得需要加,如果不加的话,就不再是tuple的数据类型,二是字符串的数据类型。

9、怎么理解函数的返回值?  

  一个函数,不管是否写return的关键字,函数都是有它的返回值的,

如果在定义的函数里面没有写return的关键字,那么函数的返回值为None,

如果写了,函数的返回值就是return后面的内容。同时需要说明的是一个函数, 可以有N个返回值。

10、怎么理解函数的动态参数

    当形式参数的个数和类型不确定的时候使用

11、字符串与列表之间的互相转换

#字符串拆分split后,把str类型转为list类型
list_str="hello,CCC"
str_list=list_str.split(',')
print(str_list)
print(type(str_list))

  结果如下图:

12、字符串的替换使用到的方法是?

    字符串的替换使用到的方法是:replace()

str1="hello world"
print("把hello替换为CCC;", str1.replace("hello", "CCC"))

  结果如下图:

13、怎么理解is,in,==

    is 是比较两个对象的内存地址(隐含了类型与内容一致))

    in 比较的是内容包含,也暗含了数据类型的比较,因为比较首先提前是数据类型是一致的(查看一个对象是否包含在另一个对象里面)

    == 主要比较的是内容和具体的数据类型(类型与内容一致,那么两个对象是相等的)

 

 

2、编写测试用例的要素是什么?

     分别是:测试用例id,测试用例名称,测试用例的目的,测试用例环境,测试用例的前提,测试用例的步骤,测试用例的结果;

3、怎么理解黑合测试,白盒测试?

        黑盒测试(从用户的角度出发),它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,

程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部

逻辑结构,主要针对软件界面和软件功能进行测试。

        白盒测试,白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,即清楚

盒子内部的东西以及里面是如何运作的。"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒"法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,

从检查程序的逻辑着手,得出测试数据。

4、测试按阶段划分,主要分为那几个阶段

       主要分为:单元测试,集成测试,系统测试,验收测试;

5、怎么理解等价类和边界值

       等价类分为有效等价类和无效等价,而边界值是作为等价类的补充说明,例如:一年有12个月,有效等价类是1-12,无效等价类是大于12,小于1的数字,

6、请描述一个完整的测试流程‘

      

UI自动化测试:

1、常用的元素定位有那几种方法,请举例说明

   常用的元素定位得方法有八种,(1)其中有七种是单元素定位,如:ID、NAME、CLASS-NAME、XPATH、CSS-SELECTOR、LINK-TEXT、PARTIAL-LINK-TEXT;

                                                                (2) 还有一种是多元素定位,如:TAG-NAME

比如:百度搜索框,

(1)通过id来定位搜索框;

from selenium import  webdriver
from selenium.webdriver.common.by import By
import time as t

'''通过ID来定位'''
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_elements_by_id('kw').send_keys("hello world")
t.sleep(5)

(2)、通过name来定位;

from selenium import  webdriver
from selenium.webdriver.common.by import By
import time as t

'''通过name来定位'''
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_name('wd').send_keys("hello world")
t.sleep(5)

(3)、通过class_name来定位;

from selenium import  webdriver
from selenium.webdriver.common.by import By
import time as t

'''通过class_nam来定位'''
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_class_name('s_ipt').send_keys("hell world")
t.sleep(5)

(4)、通过xpath来定位;

from selenium import  webdriver
from selenium.webdriver.common.by import By
import time as t

'''通过xpath的定位方式'''
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
#先定位到需要的代码行处,鼠标右键copy——>copy Xpath
driver.find_element_by_xpath('//*[@id="kw"]').send_keys("hell world")
t.sleep(5)

(5)、通过css_selector来定位;

from selenium import  webdriver
from selenium.webdriver.common.by import By
import time as t

'''通过css_selector来定位'''
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
#先定位到需要的代码行处,鼠标右键copy——>copy css_selector
driver.find_element_by_css_selector('#kw').send_keys("hell world")
t.sleep(5)

(6)、通过link_text来定位;

from selenium import  webdriver
from selenium.webdriver.common.by import By
import time as t

'''通过LINK_TEXT来定位(精准定位)'''
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_link_text('直播').click()
t.sleep(5)

(7)、通过partial_link_text来定位;

from selenium import  webdriver
from selenium.webdriver.common.by import By
import time as t

'''通过PARTIAL_LINK_TEXT来定位(模糊定位)'''
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_partial_link_text('播').click()
t.sleep(5)

(8)、通过tag_name来定位;

from selenium import  webdriver
from selenium.webdriver.common.by import By
import time as t

'''通过tag_name来定位(多个元素定位的方式)'''
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
tag=driver.find_elements_by_tag_name('input')
tag[7].send_keys('hello world')
t.sleep(5)
driver.quit()

2、单个元素定位与多个元素定位的区别是什么?

        (1)单元素定是按照元素属性定位的。

        (2)多元素定位的结果是以列表的形式呈现的,是按照列表的来定位到具体元素的索引。

3、如果是iFrame的框架,如何来定位里面的元素属性的对象

             需要先调用switch_to.frame()的方法通过索引或者ID的方式进入框架里面,然后再定位元素属性。

4、怎么理解页面对象设计模式

           页面对象设计模式:每个页面都建对应的class,类中包含了页面的输入框、标题、元素等元素,测试代码中测试这个页面时,只需要调用这个页面类(页面对象)里的页面元素即可,这样实现了将测试对象(页面对象)和测试脚本(用例脚本)分离,如果元素ID等发生变化时,不需要去修改测试代码,只需要在页面类中修改即可,利于维护所有脚本。

5、怎么理解显式等待和隐式等待

          (1)显示等待:显示等待是单独针对某个元素,设置一个等待时间如5秒,每隔0.5秒检查一次是否出现,如果在5秒之前任何时候出现,则继续向下,超过5秒尚未出现则抛异常

element = WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located(By.ID,‘kw’))
element.sendkeys("xxx")

     (2)隐式等待:隐式等待是全局的是针对所有元素,设置等待时间如10秒,如果10秒内出现,则继续向下,否则抛异常。可以理解为在10秒以内,不停刷新看元素是否加载出来。

driver.implicitly_wait(10)

6、在测试中遇到多窗口,具体怎么解决,请描述具体的步骤和编写具体的案例代码

             比如在网易邮箱界面,我们需要注册一个新的帐户,首先我们需要进入到网易邮箱的登录界面,然后通过XPATH或者LINK-TEXT的方式来获取注册网易邮箱的元素定位,这时就出现了多窗口的情况,我们需要先获取当前注册网易邮箱的窗口,然后再获取所有的窗口,循环所有的窗口,再判断是否当前的窗口是否是点击注册网易邮箱后跳转后的注册网易免费邮箱窗口,进入这个窗口,再获取当前窗口的地址,断言后退出。

#导入webdiver
from selenium import webdiver import time as t #打开浏览器Chrome driver=webdriver.Chrome() #窗口最大化 driver.maximize_window() #获取网易邮箱地址,打开网易邮箱页面 driver.get('https://mail.163.com/') #进入iframe框架 driver.switch_to.frame(0) #缓冲两秒的时间 t.sleep(2) #获取注册网易邮箱界面 now=driver.current_window_handle #定位网易邮箱元素并点击注册网易邮箱 diver.find_element_by_link_text('网易邮箱注册').click() #获取所有的窗口 all=driver.window_handles #循环所有的窗口 for handler in all: #判断当前窗口(是不是点击网易邮箱后跳转的注册网易免费邮箱界面) if handler!=now: #进入当前窗口 driver.switch_to.window(handler) #获取当前窗口得地址 url=driver.current_url print(url.endswith('utm_source=163mail')) #断言,如果是当前窗口,执行代码后返回一个Ture值 assert=url.endswith('utm_source=163mail')==True #缓冲两秒的时间 t.sleep(2) #退出 driver.quit()  

 


单元测试框架:

1、unittest与pytest的框架

2、unittest的常用组件有哪些

             unittest常用的组件一共有五个,分别是:测试用例(TestCase)、测试固件(TestFixTure)、测试套件(TestSuite)、测试执行(TestRunner)、测试报告(TestReport);

3、unittest中怎么理解测试固件

             测试固件:用于处理初始化的操作。

4、怎么理解setUp(),tearDown()与类测试固件的测试

           (1)setUp(),tearDown():每个测试用例都会被执行一次测试固件,

           (2)类测试固件(setupclass()和tearDownclass()):所有的测试用例只执行一次测试固件  

5、在unittest测试框架中,加载所有的测试模块使用到的方法是什么?具体参数是什么?

             加载所有的测试模块使用到的方法是:unittest.main()

             具体参数是:verbosity=2

6、在unittest中使用那个库来生成对应的测试报告

            使用HTMLTestRunner

7、一个完整的测试用例包含哪些步骤

            拿到测试需求 -> 分析需求(画思维导图) -> 编写⽤例 -> 划分⽤例优先级

8、怎么理解参数化(parameterized)

         一个测试点,有多个测试用例,它把列表⾥⾯的值⾸先进⾏循环,然 后把param元组⾥⾯的值赋值给测试⽅法⾥⾯对应的参数

 

posted @ 2021-09-04 11:46  就不将就就  阅读(42)  评论(0)    收藏  举报