问题(五)

UI自动化测试:

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

  ID="id"

  XPATH="xpath"

  LINK_TEXT="link text"

  PARTIAL_LINK_TEXT="partial link text"

  NAME="name"

  TAG_NAME="tag name"

  CLASS_NAME="class name"

  CSS_SELECTOR="css selector"

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

  单个元素定位:find_element

  多个元素定位:find_elements

    单个元素定位和多个元素定位的区别就是,单个元素定位返回是单个元素,多个元素定位返回的是包含多个元素的一个列表。

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

  先进入iframe框架可 id、索引的方式定位;进入框架后可正常定位元素

4、怎么理解页面对象设计模式,详细的阐述下每个目录具体的作用

  每个待测试的页面创建一个页面对象 (class),将那些繁琐的定位操作封装到这个页面对象中,只对外提供必要的操作接口

  目录结构:run.py:程序执行的入口

  base:基础类,编写测试框架基础代码     common:存公共代码,如路径

  page:对象层,编写页面对象操作的行为    config:配置文件

  test:测试模块,编写测试模块         data:存储测试数据

  image:存储图片文件的           log:存储日志文件

  utils:工具类,对文件的处理          report:存储测试报告

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

  显示等待:等待时间完成即可(单位:秒)默认等待时间为0

  隐式等待:设置最长等待时间,如果在这个时间还没有找到元素,那么抛出异常

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

import pytest
import time as t


def test_qqEmail(init, driver):
    '''登录验证:校验点击注册跳转到注册的页面'''
    t.sleep(2)
    driver.switch_to.frame('login_frame1')
    driver.switch_to.frame('ptlogin_iframe')
    nowHandler = driver.current_window_handle
    driver.find_element_by_link_text('注册新帐号').click()
    allHandlers = driver.window_handles
    for handler in allHandlers:
        if nowHandler != handler:
            driver.switch_to.window(handler)
            t.sleep(2)
            assert driver.title == 'QQ注册'

if __name__ == '__main__':
    pytest.main(["-v", "-s", "test_qqEmail.py"])

  对所有的窗口赋值

  循环所有的窗口

  判断是否是当前窗口

  如果不是,切换到新的窗口

  在新的窗口进行操作

  关闭新的窗口

  切换到最开始窗口

7、你写了多少个UI自动化测试用例?

  100个自动化测试用例左右,用于在 API 测试后对显示页面判断

8、详细的描述下你理解的UI自动化测试流程?

  搭建UI自动化测试环境

  编写测试框架和测试脚本

  增加异常流程的分支判断及脚本编写

  提取脚本中的变量参数

  使用数据驱动测试

  优化并重构脚本(复用脚本)

  模拟手动操作用户UI界面的方式,以代码方式实现自动操作和验证的一种自动化测试手段
9、你在UI自动化测试中具体使用到了哪些测试技术和工具

  pytest  unittest  selenium

  allure  jenkins
10、你编写的UI自动化测试用例你发现过bug嘛?

  发现过,删除数据数据库无响应
11、测试报告你是怎么生成的?

  引用 HTMLTestRunner 本地生成测试报告

  使用 jenkins 整个 allure 生成测试报告

12、结合sina邮箱编写UI的自动化测试用例

driver=webdriver.Chrome()
driver.maximize_window()
driver.get('https://mail.163.com/')
oldwindow=driver.current_window_handle
driver.find_element_by_xpath('//*[@id="normalLoginTab"]/div[1]/div[2]/a[1]').click()
t.sleep(3)
allwindow=driver.window_handles
for window in allwindow:
    if oldwindow!=window:
        driver.switch_to.window(window)
        t.sleep(3)
driver.find_element_by_class_name('j-register').click()
t.sleep(3)
dtest=driver.find_element_by_xpath('/html/body/div[2]/div/div/div[2]/div[2]/div[1]/div[2]')
assert dtest.text=='邮箱地址不能为空'
driver.switch_to.window(oldwindow)
t.sleep(2)
driver.quit()

13、单元测试框架unittest常用的断言方法有哪些?

 

 

单元测试框架:
1、unittest与pytest的框架

  pytest ——基于 unittest 扩展,更简洁

       测试文件文件必须以 test_ 开头

       测试类名必须以 test_ 开头

       测试方法必须以 test_ 开头

  unittest——测试文件必须导入 unittest

       测试方法以必须以test_开头

       提供 test cases、test suites、test fixtures、test runner 类

       测试类必须继承 unittest.TestCase

       测试类必须以 unittest.main()方法运行

区别:unittest 用例格式复杂,不能兼容 pytest

   pytest 用例格式简单,可以兼容 unittest
2、unittest的常用组件有哪些

  TestCase:测试用例,测试用例里面会有很多测试方法,是单元测试中最小维度的测试行为。

  TestSuite:测试套件,是测试用例的集合。

  TestFixure:测试固件,测试准备工作和收尾工作,打开和关闭浏览器,链接和关闭数据库,可有可无

  TestRunner:测试运行器,运行测试用例。

  TestReport:将测试结果呈现给用户,生成测试报告。

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

  setUp() 方法用于初始化测试固件;而 tearDown() 方法用于销毁测试固件

  setUp() :最开始执行;tearDown():最后执行

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

  setUp(),tearDown()每次都要执行;类测试固件只执行一次

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

def TestsAll():
    suite = unittest.TestLoader().discover(
        start_dir=os.path.join(os.path.dirname(__file__), 'test'),
        pattern='test_*.py',
    )
    return TestsAll

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

  引用 HTMLTestRunner.py 本地生成测试报告
7、一个完整的测试用例包含哪些步骤

  拿到测试需求(测试准备) -> 分析需求(画思维导图)->测试环境 -> 编写⽤例 (测试用例)-> 划分⽤例优先级->预期结果->测试收尾

8、怎么理解参数化

  测试进行相同的步骤,只是输入的数据不同,其他操作都是一样的,这样需要写很多测试用例,参数化可以解决这种问题,让代码更加简洁

posted @ 2022-02-21 11:43  星德川  阅读(71)  评论(0编辑  收藏  举报