从业务的实现中看自动化测试的适用范围,从白盒到黑盒、从代码段到方法再到模块、从后端业务逻辑到前端页面交互 均可实现自动化测试。
下面我们主要讲解的是从不同方位切入进行自动化测试,并列举案例。
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