全方位 多角度的自动化测试(白盒自动化-接口自动化-UI自动化、业务流程自动化测试)

从业务的实现中看自动化测试的适用范围,从白盒到黑盒、从代码段到方法再到模块、从后端业务逻辑到前端页面交互 均可实现自动化测试。

下面我们主要讲解的是从不同方位切入进行自动化测试,并列举案例。

1、方法内调用,测试代码块、方法、函数

2、可通过dubbo/zk调用测试暴露出来的函数

3、通过后端提供的接口开展自动化测试(接口自动化测试)

4、页面交互的UI自动化测试(APP/WEB/微信小程序)

5、中间件,主要是连接业务流程的消息中间件MQ

数据库层主要是用于验证逻辑处理的正确性(数据入库正确性)

1、方法内调用(白盒测试) 测试被测代码的参数传入及返回

例:测试下列add方法功能是否正确

入参:a,b两个参数      return返回值

# 被测代码

def add(a, b):
    return a + b

编写测试代码,调用被测代码,

* 可判断入参参数的合法性

* 验证参数的必传

* 可对返回值做断言,验证方法的功能性正确

#    测试代码

import unittest

class TestAddFunction(unittest.TestCase):
    def test_add_positive_numbers(self):
        result = add(3, 4)
        self.assertEqual(result, 7)

    def test_add_negative_numbers(self):
        result = add(-2, -3)
        self.assertEqual(result, -5)

    def test_add_mixed_sign_numbers(self):
        result = add(-2, 3)
        self.assertEqual(result, 1)

    def test_add_zero_with_positive_number(self):
        result = add(0, 5)
        self.assertEqual(result, 5)

    def test_add_zero_with_negative_number(self):
        result = add(-2, 0)
        self.assertEqual(result, -2)

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

2、dubbo、ZK调用-cmd命令行实现过程

cmd命令框中输入:telnet 192.168.1.62 14667 进入dubbo

· dubbo>ls    #显示所有注册的服务

· dubbo>ls -l    #查看所有的注册服务及其详情

· ls -l com.threegene.zjs.program.facade.common.service.CommonGrowthService    #查看指定某服务的详情

· invoke doActionEvalReward(true,[{"actionId":80,"activityId":15.........)    #测试具体方法

2.1、dubbo接口/ZK-python

使用python调用dubbo接口,验证dubbo接口功能正确性

Config.zookeeper_url_list = ['192.173.10.66:2183']
service_name = 'com.zveren.facade.growth.service.ZowthService'
method_name = 'ZoActioAeward'
data = dubborequest.list(service_name)	查看此服务详情
invoke_data = {"param_type_Boolean": "true",
            "param_type_list": [{"hannel": 1, "activity": 5........."}],
            "param_type_list": [{"user": 123, "Name": "zveren", "realN............}]}
res_data = dubborequest.zk_invoke(service_name, method_name, invoke_data)
print("结果数据:" + str(res_data.get("invoke_data")))

返回数据验证

2.2、dubbo接口/ZK-python

dubborequests.search(com.zveren.facade.service.ZewardGalcService)

[{'url': '*.*.*.*:*'  'methods': 'ZoActioZvaleward,zewardGalcFreview,GalcZeward,RewardGalc,ZewardGalc,commit,ZewardGalcPreview2,checkShieldAndDeductReward',  'application': 'js-zveren-core'  'dispatcher': 'message'  'dubbo': '2.6.0'  'interface': 'com.zveren.facade.reward.service.ZewardGalcService'  'owner': 'zwj'  'payload': '33554432'  'pid': '22396'  'side': 'provider'  'version': '1.0.0'  'threads': '400'  'timestamp': '1687658922318'}......]

或者这样写,编写的方法很多

3、中间件-MQ为例-java

往MQ上生产消息,被测程序自动消息消息

可以发现这生产的消息无法判断结果是否正确,此时我们可直接查数据库验证数据上述案例为一条测试用例, 我们可编写多条测试用例

运行日志

<<<<<<<<ZewardGaleZmount Start >>>>>>>>

PushData>>:{"XXXX": 3,"XXX": "ysd","type": "XXX",......}

NO Tag!

PushStatus>>:SendResult [sendStatus=SEND_OK, msgId=7F03C04, ......] StandardPushSucceeded

2023-06-29 09:12:44

AST>> AvaluationGrantDone

>>>DatabaseConnectionClosed

<<<<<<<< ZewardGaleZmount End >>>>>>>>

也可以生成漂亮的测试报告

 

4、HTTP接口-java

http是大多从业人员都会的接口测试,不管是使用工具还是各种变成语言都很容易的完成接口测试,将编写的每条用例合租在一起,并定时实行便是接口的自动化测试,有需要参数关联的接口,提前获取参数传入即可。下面使用的是testNG

@Test(groups = "Program—Home")
public void QuestionSearchRecommended() {...}

@Test(groups = "Program—Home")
public void zopupGetZopupInfo() {
    String path = "/zveren/popup/getZoupInfo";
    System.out.println("接口:" + path);
    String URL = host + path;
    String jsonStr = "{\"token\":\"" + token + "\",\"rezouceId\":\"\"......}";
    HttpURLConnectionDemo HCt=new HttpURLConnectionDemo();
    String result = HCt.doPost(URL, jsonStr);
    JSONObject resultJson = JSONObject.parseObject(result);
    System.out.println("result:\n" + result);
    //断言 code
    String code = (String) resultJson.get("code");
    Assert.assertEquals(code,"00000","断言失败!");}

@Test(groups = "Program—MyCenter")
public void SserNoteZtatistics() {...}

@Test(groups = "Program—MyCenter")
public void AvalZummary() {...}

断言数据

清晰查看所有被测接口的请求成功失败情况,并查看接口的请求时间,同样可生成测试报告。

 

5、HTTP接口-python

python接口自动化测试案例,可以去完成接口覆盖、场景覆盖,以下使用seldom框架

发起请求的基本方法

接口的地址、入参及断言代码

 

6、UI自动化-APP

使用appium

启动指定设备上的指定应用进入指定页面

desired_caps = dict()

desired_caps['platformName'] = 'Android'

desired_caps['platformVersion'] = '8'

desired_caps['deviceName'] = '648bb54c'

desired_caps['appPackage'] = 'com.zveren.aeemiao'

desired_caps['appActivity'] = 'com.zveren.module.main.ui.MainActivity'

desired_caps['noReset'] = 'True'

# desired_caps['chromedriverExecutable'] = 'd:\chromedriver.exe'

data = ["http://172.20.124.43:20000/wd/hub",desired_caps]

akw = AppiumKeyword()

akw.openApplication(data)

time.sleep(5)

通过adb获取指定应用的在指定页面的activity(adb shell dumpsys window w |findstr \/ |findstr name=)

C:\zhongzuwei>adb devices

List of devices attached

646bd54c        device

C:\zhongzuwei>adb shell dumpsys window w |findstr \/ |findstr name=  mSurface=Surface(name=FloatingBallEdgeView)/@0xdf21ce3  mSurface=Surface(name=SideSlideGestureBar-Bottom)/@0xf307d99  mSurface=Surface(name=StatusBar)/@0xa4364d5  mSurface=Surface(name=com.zveren.aeemiao /com.zveren.module.main.ui.MainActivity)/@0x3db46d1  mAnimationIsEntrance=true  mSurface=Surface(name=com.android.systemui.ImageWallpaper)

通过元素定位、操作元素来实现UI自动化
 

7、UI自动化-WEB

打开指定的页面,调整窗口的一些参数

url = "https://test.zveren.cn/index/1220000"
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.maximize_window()
driver.get(url)

查找页面元素并操作

driver.find_element_by_xpath(PXKS_SJK_SCSJ_JSMC).send_keys(
'AOTU试卷'+ str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())))
driver.find_element_by_xpath(PXKS_SJK_SCSJ_JSJJ).send_keys(
'AOTU试卷介绍'+ str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())))
driver.find_element_by_xpath(PXKS_SJK_SCSJ_BC).click()

 

8、UI自动化(微信小程序)-minitest

启动微信开发者而工具,并打开指定的小程序项目

mini = minium.Minium({
    "project_path": "D:\TencentMini\zveren-xcx-4.21.0",
    "dev_tool_path": "D:\Program Files (x86)\Tencent\WeChattool\cli.bat"
})
# project_pat:小程序项目目录地址
# dev_tool_path:开发者工具cli地址

 可以实现的一些常规操作

def test_HomePage(self):
    # 截屏
    output_path = os.path.join(os.path.dirname(__file__), "outputs/z3.png")
    self.app.screen_shot(output_path)
    # 可以使用self.logger打印一些log
    self.logger.info(f'SDKVersion is: {sys_info.get("SDKVersion")}')
    self.assertIn("SDKVersion", sys_info)

    # 点击我的页面
    self.page.get_element(".cicon-my-o").click()
    # 点击进入个人中心
    # self.page.get_element(".cicon-home-sm-o").click()
    self.app.go_home()
    # 直接进入某页面
    self.app.navigate_to("/pages/user")
    # 点击专家问答
    self.page.get_element("view[class='item-btn'][data-type='faqs']").click()

 

9、UI自动化(微信小程序)-Airtest

可多种语法编写

语法一:使用图片识别

语法二:使用poco

也可生成漂亮的测试报告

 

10、UI自动化(微信小程序/APP)-Sonic

sonic是一个强大的工具,

可实现远程控制相关:控制面板、应用列表、webview/H5调试、快速截图、terminal、网络抓包、控件获取、运行UI测试、性能监控、agent中心、设备中心等

测试步骤相关:自定义脚本、poco控件、切换webview、图像识别类等

测试管理相关:控件元素、测试用例、测试步骤、公共步骤、全局参数、测试套件、定时任务、测试结果

项目管理相关:项目管理、通知机器人、版本管理、模块管理


回顾一下:从各个节点切入开展自动化测试

说明:

具体的案列说的潦草,主要说明能从这些节点进入测试,大致案列,未说明细节,如有需要请留言、后续发布每种自动化测试的具体细节。 

2024年2月19日

zveren

  • 29
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zveren

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值