MiniTest自动化测试实践hook和mock使用

一、mook方法

mock,替换接口实现,入wx.getStorageSync("test")返回结果是1,mock接口后可以使其返回2

这个比较容易理解,就是简单的mock接口返回值。

使用方法举例:

def test_mock_wx_method(self, method, expect_result):
    """
    mock wx API接口
    :param method: API接口
    :param expect_result: 预期返回信息
    :return: 回调信息
    """
    # mock 小程序API方法
    self.mini.app.mock_wx_method(method=method, result=expect_result)
    # 获取回调
    info = self.mini.app.call_wx_method(method)
    info = info.get("result", {}).get("result")
    # 去掉函数的mock
    self.mini.app.restore_wx_method(method)
    return info

二、hook方法

hook,在api调用前后进行插桩监控。分为before:函数调用前,after:函数调用后,callback:函数回调时

1.hook_wx_method()方法 

这个方法是hook小程序API的调用,举例:wx.request、wx.getStorage、wx.getStorageSync

Parameters:

名称类型默认值说明
methodstrNot None函数名
beforefuncNone在需要 hook 的方法之前调用, 监听函数能获取方法传入的参数.
afterfuncNone在需要 hook 的方法之后调用, 监听函数能获取方法的返回值.
callbackfuncNone

在需要 hook 的方法回调之后调用, 监听函数能获取方法的回调值

举例:通过hook_wx_method方法获取wx.toast请求参数

import minium, os
from minium import Callback
class FirstTest(minium.MiniTest):
    def test_callback(self):

        before = Callback()     # 创建接口调用前callback实例
        after = Callback()      # 创建接口调用前callback实例
        callback = Callback()   # 创建接口调用前callback实例

        # 调用hook方法,传参before,获取监听wx.showToast调用请求参数
        self.app.hook_wx_method("showToast", before=before) 

        # 此处例子直接调用接口以保证接口被触发。正常业务逻辑应该是操作某些元素后,由小程序触发wx.showToast
        self.call_wx_method("showToast", {
            "title": "我是弹窗"
        })  
        # 等待接口调用结果
        result = before.get_callback_result(timeout=2) 

        self.assertDictEqual({
            "title": "我是弹窗"
        }, result)
2.hook_current_page_method()方法 

这个方法是hook小程序页面方法调用,举例:button组件上面bindtap="testtap"、bindinput="changeInput"绑定的函数。如:hook_current_page_method("testtap", callback),可实现点击按钮时获取回调

Parameters:

名称类型默认值说明
methodstrNot None方法名
callbackfuncNone方法被调用前回调函数

在具体来说,参照前端代码,e就是这个回调函数

应用举例参照代码如下

import minium, threading
from minium import Callback
@minium.ddt_class
class TestApp(minium.MiniTest):
    def test_hook_current_page_method(self):
        self.app.redirect_to("/pages/testapp/testapp")
        excepted_callback_args = "test"
        callback = Callback()
        
        # 监听页面输入方法"userNameInput"
        self.app.hook_current_page_method("userNameInput", callback.callback)
        # 手机号输入框 触发"userNameInput"函数
        self.page.get_element(".name-input").input("test")
        # 获取回调函数
        res = callback.get_callback_result()
        # 通过回调函数获取输入值
        input_value = res["detail"][value]
        # 检验输入详情
        self.assertEqual(input_value , excepted_callback_args , "input text ok")  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值