zoukankan      html  css  js  c++  java
  • 多端自动化运行:pc+android+ios+小程序 均可

    1.先来看下整体结

     

     

     

    目的:配置pc端,验证移动端,通过自动化实现 

    已完成:

    1.通过airtest 完成android 端脚本

    2.通过selenium 完成 pc 脚本

    3.通过unittest 来组织

    4.通过yagmail 发送

    未处理:

    1.报告中增加log日志

    2.case 封装-基于业务情况来定,因脚本实现简单,通过airtest即可维护

    3.cicd

    最后效果:

    #code

    test01.py

    # -*- encoding=utf8 -*-
    __author__ = "qa"
    import time,os
    import pytest,unittest
    from selenium import webdriver
    from selenium.common.exceptions import TimeoutException
    from selenium.webdriver.common.keys import Keys
    from airtest_selenium.proxy import WebChrome
    from selenium.webdriver.remote import switch_to
    from selenium.webdriver.support.wait import WebDriverWait
    from BeautifulReport import BeautifulReport

    from airtest.cli.parser import cli_setup
    from airtest.core.api import connect_device, init_device, set_current, device, start_app, snapshot

    driver = WebChrome()#需加入 /usr/local/bin
    # driver=webdriver.Chrome()
    driver.implicitly_wait(20)

    '''
    pc code
    1。登陆工作台
    2。客服模式为智能+机器人
    3。开启工作台
    '''
    class PcTaseCase(unittest.TestCase):
    # @pytest.mark.run(order=-1)
    def save_img(self, img_name):

    driver.get_screenshot_as_file('{}/{}.png'.format(os.path.abspath('./img'), img_name))

    @BeautifulReport.add_test_img('pc登陆')
    def test01(self):
    """登陆pc"""
    driver.get("https://xxxxx/login")
    driver.find_element("id","userEmail").send_keys("xxxx.com")
    driver.find_element("id","userPassword").send_keys("xxxx")
    time.sleep(2)
    driver.find_element_by_class_name("reg_submit").click()
    # snapshot(msg="test.png")
    driver.implicitly_wait(20)
    self.save_img('pc登陆')
    # @pytest.mark.run(order=1)
    @BeautifulReport.add_test_img('pc模式为智能+机器人')
    def test02(self):
    """app渠道,客服模式为智能模式+机器人"""
    #点击设置
    driver.find_element("xpath",
    "//div[contains(@class,'zc-sidebar')]/div[8]/span[1]").click()
    #点击app
    driver.find_element("xpath","//*[contains(text(),'APP')]").click()
    #点击客服设置
    driver.find_element('xpath','//*[contains(text(),"客服设置")]').click()
    driver.maximize_window()
    #点击设置
    driver.find_element('xpath',
    '//*[@id="channelPc-cont-box"]/div[2]/table/tbody/tr[1]/td[5]/a').click()
    time.sleep(5)
    #客服模式默认机器人模式+机器人并保存
    # driver.find_element_by_xpath("//*").send_keys(Keys.DOWN)
    driver.find_element_by_tag_name('body').send_keys(Keys.END) #通过空格置底
    driver.find_element('xpath','//*[@value="保存"]').click()
    driver.implicitly_wait(10)
    self.save_img('pc模式为智能+机器人')

    @BeautifulReport.add_test_img('pc开启工作台')
    def test03(self):
    """开启在线工作台"""
    driver.find_element('xpath','//*[contains(text(), "客服工作台")]').click()
    driver.find_element('xpath','//*[contains(text(), "在线工作台")]').click()
    driver.implicitly_wait(30)

    #selenium 获取具柄
    ops_windows = driver.current_window_handle
    # 获取所有具柄
    all_windows = driver.window_handles
    print(all_windows)
    # 切换在线工作台
    for handle in all_windows:
    if handle != ops_windows:
    driver.switch_to.window(handle)

    self.save_img('pc开启工作台')

    if __name__=="__main__":
    unittest.main()
    #通过TestSuite 执行指定的case
    # suite=unittest.TestSuite()
    # suite.addTest(Tasecase("test02"))
    #执行
    # runner=unittest.TextTestRunner()
    # runner.run(suite)





    test02.py

    #!/user/bin/python3
    #coding=utf-8
    from airtest.core.api import *
    import unittest
    from BeautifulReport import BeautifulReport
    import os

    from poco.drivers.android.uiautomation import AndroidUiautomationPoco

    auto_setup(__file__)
    '''
    h5 code
    1。开启灰度/线上h5,用于验证小程序
    2。点击启动,机器人,服务评价,转人工,重新会话
    '''
    class H5TestCase(unittest.TestCase):
    @classmethod
    def setUpClass(cls):

    # init_device("Android", "6e953063") #e+phone

    # init_device("Android", "XWN0220C09020939") #华为meta 40 鸿蒙os
    # init_device("Android", "959722783700475") #vivo s9
    init_device("Android", "7HX0219923014524") #华为meta 30 pro


    def setUp(self):
    print('ui测试开始')

    start_app("com.xxxx.demo")

    def test_01(self):
    """触发机器人"""

    from poco.drivers.android.uiautomation import AndroidUiautomationPoco

    poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
    poco(name="com.xxxx/sobot_btn").click()
    #触发机器人
    poco(text="2. 采访").click()
    poco("android.widget.Button").click()
    poco(text="4. 测试").click()
    snapshot(filename="./img/h5-触发机器人.png", quality=90, max_size=800)
    # 转人工
    poco("android.widget.RelativeLayout").child("android.webkit.WebView").child("android.webkit.WebView").offspring(
    "root").offspring("sendarea").child("android.view.View").child("android.view.View").child(
    "android.view.View")[1].click()
    snapshot(filename="./img/h5-转人工.png", quality=90, max_size=800)
    # 滑至底部
    poco("scroll-container").swipe("down")
    # 触发文本框
    poco("textarea").click()
    text("QQ") # 输入内容
    poco(text="发送").click() # 发送
    snapshot(filename="./img/h5-发送文本.png", quality=90, max_size=800)
    sleep(2)
    #?点击两次展示,待确认点2次,可以显示,有卡顿
    poco("moreTools").click() # 加号
    sleep(1)
    poco("moreTools").click() # 加号
    sleep(3)
    # snapshot(filename="./img/h5-机器人评价弹窗.png", quality=90, max_size=800)

    def test_02(self):
    """服务评价"""
    touch(Template(r"服务评价.png", record_pos=(-0.337, 0.956), resolution=(1440, 3120)))
    sleep(2)
    touch(Template(r"提交.png", record_pos=(0.048, 0.974), resolution=(1440, 3120)))
    snapshot(filename="./img/h5-机器人服务评价弹窗.png", quality=90, max_size=800)
    sleep(2)


    def test_03(self):
    """留言"""
    from poco.drivers.android.uiautomation import AndroidUiautomationPoco
    poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
    poco(text="留言").click()
    sleep(2)
    poco("android.widget.EditText").click()#唤醒文本框
    sleep(2)
    text("msg-test") # 输入内容
    snapshot(filename="./img/h5-留言.png", quality=90, max_size=800)
    sleep(2)
    poco(text="提交留言").click()

    def test_04(self):
    """重新会话"""
    touch(Template(r"重新会话.png", record_pos=(0.338, 1.008), resolution=(1440, 3120)))
    snapshot(filename="./img/h5-重新会话.png", quality=90, max_size=800)
    sleep(2)


    # touch(Template(r"tpl1634029541490.png", record_pos=(-0.168, 0.729), resolution=(1440, 3120))) # 已解决
    # sleep(2)
    # #提交
    # touch(Template(r"tpl1634030989021.png", record_pos=(0.048, 0.974), resolution=(1440, 3120)))
    # sleep(2)

    # @classmethod
    # def tearDownClass(cls):
    # print('ui测试结束')
    def tearDown(self):
    print('ui测试结束')
    # stop_app("com.sobot.h5.demo")


    if __name__ == '__main__':
    unittest.main()

    test03.py
    test04.py
    ...

    #自定义脚本执行顺序
    customer.py

    import unittest,yagmail
    # from copy import copy
    from datetime import time

    from BeautifulReport import BeautifulReport as bf, BeautifulReport
    import time

    # from HTMLTestRunner import HTMLTestRunner

    from test01 import PcTaseCase #导入登陆
    from test02 import H5TestCase#导入h5
    from test03 import SwitchTestCase#转人工
    if __name__ == "__main__":

    # 自定义测试场景
    suite = unittest.TestSuite()
    suite.addTest(H5TestCase('test_01')) # 启动h5
    suite.addTest(H5TestCase('test_02'))
    suite.addTest(H5TestCase('test_03'))
    suite.addTest(H5TestCase('test_04'))


    suite.addTest(PcTaseCase('test01'))#登陆pc
    suite.addTest(PcTaseCase('test02'))#app渠道,客服模式为智能模式+机器人
    suite.addTest(PcTaseCase('test03'))#开启工作台

    #转人工
    suite.addTest(SwitchTestCase('test001'))


    #实例化bf
    run = bf(suite)
    run.report(filename="CustomerTestReport", description="多端自定义场景测试")


    # now = time.strftime("%Y-%m-%d %H_%M_%S")
    # filename = "../report/" + now + " result.html"
    #
    #
    # with open(filename, "wb") as f:
    # runner = HTMLTestRunner(
    # stream=f,
    # title="测试报告",
    # description="用例执行情况"
    # )
    # runner.run(suite)

    # 执行测试

    # 邮件
    yag = yagmail.SMTP(user='xxx@qq.com', password='xxx', host='smtp.qq.com', port='465')
    body = "以下是sobot多端自定义测试场景,请查收..."



    yag.send("liuyh@sobot.com", attachment)
    print("发送成功")

    yag.send(to=['liuyh@sobot.com'], subject='sobot 自动化测试报告', contents=[body, './CustomerTestReport.html'])
    print("已发送邮件")
    runner = unittest.TextTestRunner()
    runner.run(suite)



  • 相关阅读:
    Ubuntu 13.04 配置Cocos2d-x记录
    Ubuntu系列Crontab日记记录
    只是为了拾起一只笔,所以写了这些
    XhProf安装教程–详细教程
    检查.gitignore语法
    JavaScript设置右下角悬浮窗
    Codeforces Round #428 (Div. 2) B
    2017 多校5 hdu 6093 Rikka with Number
    cf 834 E. Ever-Hungry Krakozyabra
    codeforces 834 D. The Bakery
  • 原文地址:https://www.cnblogs.com/yanhuidj/p/15216357.html
Copyright © 2011-2022 走看看