The Automation Testing System 2: System Testing

ZStack(三)-zstack代码结构简介 本篇主要介绍一下ZStack开源版本的代码组成,简单介绍各个目录代码的作用。 从最新的官网上看,现在zstack项目有四部分组成,包括zstack、zstack-dashboard、zstack-utility、zstack-woodpecker 阅读详情

提供:ZStack云计算


ZStack's system testing system runs test cases in real hardware environment; like integration testing, the system testing is full automated and covers aspects of functional tests, stress tests, and performance tests.

Overview

Despite the integration testing system we introduced in The Automation Testing System 1: Integration Testing is powerful to expose a large proportion of bugs in the development process, it has inherent weaknesses. First, as the test cases use simulators, they cannot test real scenarios, for example, testing creating a VM on a physical KVM host. Second, the integration test cases focus on testing a single scenario in a simple, artificial environment; for example, still the creating VM case, it may only deploy a minimal environment having one host, one L3 network that just meets the requirement for creating a VM. These weaknesses, however, are deliberate because we want developers can quickly and easily write cases when they develop a new feature, it's a tradeoff we have to take.

System testing, which aims to test the whole software in a real, complex environment, compensates integration testing naturally. ZStack's system testing system is designed for two goals:

  1. Complex scenario: scenarios should be more complex than the real world use cases, to test limits of the software. For example, the attaching/detaching volume case will continuously and repeatedly attach/detach volumes to VMs in a very fast manner that humans cannot do with their hands.

  2. Easy to write and maintain test cases: just like integration testing system, the system testing system takes over most boring, repeating tasks from testers, letting testers write cases efficiently.

The system testing system is a Python project named as zstack-woodpecker and is made up of three parts:

  1. Testing Framework: a framework managing all test cases and providing necessary libraries, utilities.

  2. Environment deploying tool: a tool that can deploy an environment from XML configuration file; it's very similar to theDeployer in integration testing system.

  3. Modularized test cases: test cases are highly modularized and are covering functional test, performance test, and stress test.

System Testing

zstack-woodpecker is created all by ourselves; before deciding to reinvent the wheel, we tried popular Python testing frameworks likenose and finally selected to create a new tool that fits our interests best.

Suite Configuration

Like all other testing frameworks, a test suite in zstack-woodpecker starts with suite setup, ends with suite teardown, and has test cases among them. The suite setup and suite teardown are actually two special cases that the suite setup is responsible for preparing the environment needed by test cases followed, and that the suite teardown is responsible for cleaning up the environment when all cases finish. A typical test suite configuration file looks like:


   
  1. <integrationTest>
  2. <suite name="basic test" setupCase="suite_setup.py" teardownCase="suite_teardown.py" parallel="8">
  3. <case timeout="120" repeat="10">test_create_vm.py</case>
  4. <case timeout="220">test_reboot_vm.py</case>
  5. <case timeout="200">test_add_volume.py</case>
  6. <case timeout="200">test_add_volume_reboot_vm.py</case>
  7. <case timeout="400">test_add_multi_volumes.py</case>
  8. <case timeout='600' repeat='2' noparallel='True'>resource/test_delete_l2.py</case>
  9. </suite>
  10. </integrationTest>

Readers with sharp eyes may have noticed some parameters that are not seen in other testing frameworks. The first one is thetimeout; every test case can define its timeout and if it cannot finish in the period it will be marked as timeout in the final result. The second one is repeat that allows you to specify how many times the case should run within the suite. The third one that is also the killer one is parallel that allows tester to set the parallelism level of the suite; this is the key feature that makes zstack-woodpecker runs test cases very fast; in the above example the parallel is set to 8, that means there will be at most 8 cases running simultaneously; this not only speeds up running cases but also creates a complex scenario that simulates users carrying out different tasks sharing the same environment. However, not all cases can be executed simultaneously; in our example the casetest_delete_l2.py will delete L2 networks on which are relied by other cases, so it cannot be executed while other cases are running; this is the situation that the fourth parameter noparallel plays its role; once it's set to True, the case will be executed lonely and no other cases can run at the same time.

Command Line Tool

zstest.py is a command line tool that helps testers control the testing framework, doing jobs like starting test suite, listing test cases and so forth. zstest.py provides plenty of options assisting testers simplifying their work. A couple of options, which we use in our daily testing, are particular useful as follows.

Testers can retrieve available test cases by option -l, for example:

   
  1. ./zstest.py -l

it will show results like:

The test suite name is the first level folder name of test cases; for instance, in above picture you see lots of cases beginning with basic(e.g. basic/test_reboot_vm.py), yes the basic is the test suite name. Testers can start a suite by option -s, using full suite name or part of suite name as long as it's unique, for example:

   
  1. ./zstest.py -s basic

or

   
  1. ./zstest.py -s ba

Testers can also selectively execute cases using their names or IDs, with the option -c; for example:

   
  1. ./zstest.py -c 1,6

or

   
  1. ./zstest.py -c suite_setup,test_add_volume.py

remember you need to run the suite setup case suite_setup.py as the first case, unless you have done it manually.

As a test suite will execute all cases, clean up the environment, and send out a result report, testers sometimes may want to stop the suite and keep the environment when a case fails, so they can look into the failure and debug; option -n and -S are made for this; -ninstructs testing framework not to clean up the environment while -S asks it to skip cases not executed; for example:

   
  1. ./zstest.py -s virutalrouter -n -S

Besides, the option -b can pull the latest source code and build a brand new zstack.war, it's particularly useful in nightly test that is supposed to test newest code:

   
  1. ./zstest.py -s virutalrouter -b

Once all cases finish, a report is generated and printed out on the screen:

The testing framework will keep all logs and will directly print out the absolute path to each failure log if there are any. In addition to normal logs that record verbose details, there is a special log called action log that records information about every API call; because it's the log purely about API, we can easily root cause a failure without being distracted by testing framework logs. Besides, it's an important tool that can automatically generate a new case to replay the failure, this is the magic weapon we use to debug failures in Model-based testing that every case executes APIs randomly; you can check out details in The Automation Testing System 3: Model-based Testing. A snippet of action log is like:

Environment Deploying Tool

Similar to the integration testing, the frequent and repeated task for every test case is preparing the test environment; for example, case testing creating VM needs to setup dependent resources like zone, cluster, host and so on. zstack-woodpecker leverages zstack-cli, which is the command line tool of ZStack to deploy testing environment from an XML configuration file; for example:

   
  1. zstack-cli -d zstack-env.xml

the format of XML configuration file is similar to what integration testing uses; a snippet of the configuration is like:

   
  1. ...
  2. <zones>
  3. <zone name="$zoneName" description="Test">
  4. <clusters>
  5. <cluster name="$clusterName" description="Test"
  6. hypervisorType="$clusterHypervisorType">
  7. <hosts>
  8. <host name="$hostName" description="Test" managementIp="$hostIp"
  9. username="$hostUsername" password="$hostPassword" />
  10. </hosts>
  11. <primaryStorageRef>$nfsPrimaryStorageName</primaryStorageRef>
  12. <l2NetworkRef>$l2PublicNetworkName</l2NetworkRef>
  13. <l2NetworkRef>$l2ManagementNetworkName</l2NetworkRef>
  14. <l2NetworkRef>$l2NoVlanNetworkName1</l2NetworkRef>
  15. <l2NetworkRef>$l2NoVlanNetworkName2</l2NetworkRef>
  16. <l2NetworkRef>$l2VlanNetworkName1</l2NetworkRef>
  17. <l2NetworkRef>$l2VlanNetworkName2</l2NetworkRef>
  18. </cluster>
  19. </clusters>
  20. ...
  21. <l2Networks>
  22. <l2VlanNetwork name="$l2VlanNetworkName1" description="guest l2 vlan network"
  23. physicalInterface="$l2NetworkPhysicalInterface" vlan="$l2Vlan1">
  24. <l3Networks>
  25. <l3BasicNetwork name="$l3VlanNetworkName1" description = "guest test vlan network with DHCP DNS SNAT PortForwarding EIP and SecurityGroup" domain_name="$L3VlanNetworkDomainName1">
  26. <ipRange name="$vlanIpRangeName1" startIp="$vlanIpRangeStart1" endIp="$vlanIpRangeEnd1"
  27. gateway="$vlanIpRangeGateway1" netmask="$vlanIpRangeNetmask1"/>
  28. <dns>$DNSServer</dns>
  29. <networkService provider="VirtualRouter">
  30. <serviceType>DHCP</serviceType>
  31. <serviceType>DNS</serviceType>
  32. <serviceType>SNAT</serviceType>
  33. <serviceType>PortForwarding</serviceType>
  34. <serviceType>Eip</serviceType>
  35. </networkService>
  36. <networkService provider="SecurityGroup">
  37. <serviceType>SecurityGroup</serviceType>
  38. </networkService>
  39. </l3BasicNetwork>
  40. </l3Networks>
  41. </l2VlanNetwork>
  42. ...

the deploying tool is usually invoked by suite setup before running any case. Testers can define variables starting '$' in the XML configuration and resolve variables in a separate property file; by this way, the XML configuration works as a template that can produce different environments; an example of property file looks like:

   
  1. TEST_ROOT=/usr/local/zstack/root/
  2. zstackPath = $TEST_ROOT/sanitytest/zstack.war
  3. apachePath = $TEST_ROOT/apache-tomcat
  4. zstackPropertiesPath = $TEST_ROOT/sanitytest/conf/zstack.properties
  5. zstackTestAgentPkgPath = $TEST_ROOT/sanitytest/zstacktestagent.tar.gz
  6. masterName = 192.168.0.201
  7. DBUserName = root
  8.  
  9. node2Name = centos5
  10. node2Ip = 192.168.0.209
  11. node2UserName = root
  12. node2Password = password
  13.  
  14. node1Name = 192.168.0.201
  15. node1Ip = 192.168.0.201
  16. node1UserName = root
  17. node1Password = password
  18.  
  19.  
  20. instanceOfferingName_s = small-vm
  21. instanceOfferingMemory_s = 128M
  22. instanceOfferingCpuNum_s = 1
  23. instanceOfferingCpuSpeed_s = 512
  24.  
  25. virtualRouterOfferingName_s = virtual-router-vm
  26. virtualRouterOfferingMemory_s = 512M
  27. virtualRouterOfferingCpuNum_s = 2
  28. virtualRouterOfferingCpuSpeed_s = 512
  29.  
  30. sftpBackupStorageName = sftp
  31. sftpBackupStorageUrl = /export/backupStorage/sftp/
  32. sftpBackupStorageUsername = root
  33. sftpBackupStoragePassword = password
  34. sftpBackupStorageHostname = 192.168.0.220

Note: As you may have guessed, the tool can be used for administrators to deploy a cloud from the XML configuration; and what's more, administrators can do the reverse that dumps a cloud into XML file by zstack-cli -D xml-file-name.

For performance and stress test, the environment usually needs a large number of resources, for example, 100 zones, 1000 clusters. In order to avoid for example manually repeating 1000 lines of cluster definition in the XML configuration, we introduce a propertyduplication that can help create duplicated resources; for example:


   
  1. ...
  2. <zones>
  3. <zone name="$zoneName" description="10 same zones" duplication="100">
  4. <clusters>
  5. <cluster name="$clusterName_sim" description="10 same Simulator Clusters" duplication="10"
  6. hypervisorType="$clusterSimHypervisorType">
  7. <hosts>
  8. <host name="$hostName_sim" description="100 same simulator Test Host"
  9. managementIp="$hostIp_sim"
  10. cpuCapacity="$cpuCapacity" memoryCapacity="$memoryCapacity"
  11. duplication="100"/>
  12. </hosts>
  13. <primaryStorageRef>$simulatorPrimaryStorageName</primaryStorageRef>
  14. <l2NetworkRef>$l2PublicNetworkName</l2NetworkRef>
  15. <l2NetworkRef>$l2ManagementNetworkName</l2NetworkRef>
  16. <l2NetworkRef>$l2VlanNetworkName1</l2NetworkRef>
  17. </cluster>
  18. ...

In the above example, 100 zones, 1000 cluster (100 zones with 10 clusters in each), and 100,000 hosts (1000 cluster with 100 hosts in each) will be created. It saves testers a lot of efforts in preparing an environment for complex performance and stress test.

Modularized Test Cases

Test cases in system testing are highly modularized. Every case essentially performs three steps:

  1. creating resources to be tested
  2. validating result
  3. cleanup

zstack-woodpecker itself provides a comprehensive library helping testers conduct those activities; APIs are well wrapped in a library automatically generated from ZStack source code; testers don't need to write any raw API call. Checkers, which validate test results, are also created for every resource; for example, VM checker, volume checker; testers can easily call those checkers to validate resources they have created without writing tons of lines code; if current checkers cannot satisfy certain situation, testers can also create their own checkers and plug them into the testing framework.

A sample of test case is like:

   
  1. def test():
  2. test_util.test_dsc('Create test vm and check')
  3. vm = test_stub.create_vlan_vm()
  4. test_util.test_dsc('Create volume and check')
  5. disk_offering = test_lib.lib_get_disk_offering_by_name(os.environ.get('rootDiskOfferingName'))
  6. volume_creation_option = test_util.VolumeOption()
  7. volume_creation_option.set_disk_offering_uuid(disk_offering.uuid)
  8. volume = test_stub.create_volume(volume_creation_option)
  9. volume.check()
  10. vm.check()
  11. test_util.test_dsc('Attach volume and check')
  12. volume.attach(vm)
  13. volume.check()
  14. test_util.test_dsc('Detach volume and check')
  15. volume.detach()
  16. volume.check()
  17. test_util.test_dsc('Delete volume and check')
  18. volume.delete()
  19. volume.check()
  20. vm.destroy()
  21. vm.check()
  22. test_util.test_pass('Create Data Volume for VM Test Success')

Like the integration testing, testers can work out a case with only tens of lines code. The modularity not only helps simplify writing test cases, but also develops a solid base for Model-based testing that we will elaborate in the next article.

Summary

In this article, we introduced our system testing system. By doing more complex tests than real world use cases, the system testing gives us much confidence that how ZStack will perform in real hardware environment, which lets us be able to evolve quickly to a mature product.

VLA-2025-03:GR00T N1【骨架:Eagle-2;端到端双系统VLA:S2 VLM+S1 DiT+FM;数据:单/双臂+人形,机器人+人类+仿真+神经共592.9M帧/8375.7小时】 通用机器人需要多功能的躯体和智能的头脑。近年来,人形机器人的发展在构建人类世界中通用自主性的硬件平台方面展现出巨大潜力。一个基于海量多样化数据源训练的机器人基础模型,对于使机器人能够推理新情况、稳健应对现实世界的多变性以及快速学习新任务至关重要。为此,我们推出了GR00T N1,一个面向人形机器人的开放基础模型。GR00T N1是一个具有双系统架构的视觉‑语言‑动作(VLA)模型。视觉语言模块(系统2)通过视觉和语言指令来解读环境。随后的扩散Transformer模块(系统1)实时生成流畅的电机动作。 阅读详情

相关推荐

Harness Engineering:从基座模型到自适应AI系统的工程实践框架

在AI系统开发中,递归式自我改进(RSI)是提升模型持续学习能力的关键技术。其核心原理是通过构建外部部署系统来编排模型的执行流程,而非直接修改模型权重。这种工程实践的价值在于能够将静态模型能力转化为动态、自适应的智能系统,显著降低优化成本并加速迭代周期。在应用场景上,RSI技术特别适用于复杂长程任务、自动化研究流程和智能Agent系统构建。Harness Engineering作为RSI的工程实现框架,通过任务规划、上下文管理、工具集成等核心组件,为AI系统提供了可进化、可管理的部署架构。该框架融合了Wor

weixin_33966095的博客 348

ZStack——自动化测试系统2:系统测试

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33811539的博客 201

ChromeDriver 140.0.7339.81 安装配置与Selenium自动化测试避坑指南

在Web自动化测试和爬虫开发中,浏览器驱动是连接自动化脚本与真实浏览器的关键桥梁。其核心原理在于遵循W3C WebDriver协议,将脚本指令翻译成浏览器能理解的底层通信协议(如Chrome DevTools Protocol),从而实现精准的浏览器操控。这项技术的价值在于极大地提升了测试效率和爬虫的可靠性,广泛应用于UI自动化测试、数据采集和网页监控等场景。本文聚焦于ChromeDriver这一特定组件,针对版本140.0.7339.81,深入解析其与Chrome浏览器的严格版本匹配机制,并提供从官方下载

congsikuai0611的博客 396

ZStack——自动化测试系统3:基于模型的测试

    模型测试系统是zstack-woodpecker中的一个子项目。通过有限状态机和行为选择策略,它可以产生随机的API操作,一直运行下去,直到遇到一个缺陷或者预定义的退出条件。ZStack依赖模型测试去测试真实世界中难以遇到的边界用例,在测试覆盖度方面补充集成测试和系统测试。    概述    测试覆盖率是一个判断一个测试系统品质的重要指示器。常规测试方法论,例如单元测试,集成测试,系统测试...

bjczhl的博客 3277

IaaS开源新项目-ZStack技术架构总览

ZStack 是一个全新的开源 IaaS 软件,吸取OpenStack等前辈的经验,针对各种云的问题重头设计了整套架构,旨在解决IaaS复杂度、稳定性、可伸缩性和灵活性等问题。ZStack 0.6 已经提供了大部分 IaaS 的基本功能,包括:虚拟机管理,存储卷管理,存储卷快照,各种网络服务(DHCP、DNS、SNAT、EIP、PortForward 以及 Security Group)。

2022-04-06 RK3566 上调试百兆以太网卡YT8512C 调试记录

一、原理图 二、dts &gmac1_clkin{ clock-frequency = <50000000>; status = "okay"; }; &gmac1 { phy-mode = "rmii"; clock_in_out = "input"; snps,reset-gpio = <&gpio4 RK_PC2 GPIO_ACTIVE_LOW>; snps,reset-active-low; sn...

海月汐辰 1万+

Penetration Testing、Security Testing、Automation Testing

相关学习资料 http://www.cnblogs.com/LittleHann/p/3823513.html http://www.cnblogs.com/LittleHann/p/3828927.html http://www.searchsecurity.com.cn/showcontent_56011.htm https://www.owasp.org/index.php/Fi...

weixin_34355881的博客 1681

CTF全能工具箱ProV2:集成AI与94GB离线资源库,打造无网环境下的智能解题流水线

CTF全能工具箱ProV2是一款专为线下CTF比赛设计的All-in-One离线解决方案。它集成了94GB的庞大离线资源库,涵盖Web、逆向、Pwn等全方向工具链与知识库,并创新性地内置了本地AI大模型,可在断网环境下提供智能解题辅助,实现从信息收集到漏洞利用的智能流水线作业,极大提升比赛效率。

weixin_29240343的博客 424

自动化框架Quantum Automation Framework (JAVA,Appium,TestNG,QAF) + cucumber + perfecto (mobile)

一些框架进本设置和信息,请参照我上一篇关于web测试的文章自动化框架Quantum Automation Framework (JAVA,Appium,TestNG,QAF) + cucumber + perfecto (web)https://blog.youkuaiyun.com/leonlee85/article/details/80892401仅以此作为学习笔记分享,描述理解有错误欢迎指正。(转载请注...

五元包早餐的博客 2374

Windows服务器渗透必备:5款杀软在线识别平台实测对比(附避坑指南)

本文针对Windows服务器渗透测试中的关键环节,实测对比了五款主流的在线杀软识别平台。文章从实战场景出发,深入分析了各平台在识别准确率、响应速度、隐匿性及使用风险上的差异,并提供了详尽的避坑指南与高级隐匿技巧,旨在帮助安全人员快速、精准地识别目标环境安全防护,为后续行动奠定情报基础。

weixin_29322553的博客 434

GD32主程序跑飞?可能是BOOT0引脚惹的祸(附J-LINK调试实录)

本文针对GD32微控制器程序下载后无法运行的典型问题,深入剖析了BOOT0引脚配置对启动模式的关键影响。通过结合J-LINK调试器与KEIL MDK环境,详细演示了如何从程序跑飞现象(如PC指向0x1FFF Fxxx)定位到硬件层面的BOOT0引脚与VDD短路故障,并提供了系统的硬件排查步骤与设计预防建议。

d6e7f8的博客 706

AG Kit 中的 QA 自动化工程师:用 qa-automation-engineer Agent 搭建 E2E 测试与 CI 质量防线

本篇技术指南以 AG Kit 仓库中的 [qa-automation-engineer.md](https://link.gitcode.com/i/7be18688799ca932b4f4e4b3013103bf) 角色定义文档为主体,结合 [webapp-testing](https://link.gitcode.com/i/02186b4bf1a04ef94a9fe76b3efc5283)、

gitblog_01012的博客 424

ENVI-met新手必看:从零开始创建城市微气候模型(附详细步骤+底图制作技巧)

本文为ENVI-met新手提供从零开始创建城市微气候模型的详细指南,包括环境准备、参数配置、底图制作技巧和三维模型构建步骤。特别针对常见问题提供解决方案,帮助初学者快速掌握城市微气候模拟技术,提升建模效率。

weixin_29269441的博客 407

【资源自取】如何用 5 步排查骁龙机型上的 App 卡顿:Snapdragon Profiler 2023.5 使用全解

Snapdragon Profiler 2023.5 是面向骁龙处理器的骁龙性能分析工具:连接真机后采集 CPU、GPU、内存、功耗与温度数据,帮你不用靠猜就能找到应用卡顿的原因。 ## 为什么优化骁龙机型不能靠猜 拿手游举例:同一份构建在办公室的旗舰工程机上跑着没问题,测试同学手里却反馈"市集场景明显掉帧"。翻日志没有异常,埋点只能告诉你"帧耗时变长了",却回答不了"是谁变长的"。 常见的

gitblog_00008的博客 337

BitLocker恢复密钥丢失?从原理到实战的完整解锁与系统重生指南

磁盘加密技术是数据安全的核心防线,它通过对存储设备上的数据进行编码,确保未经授权的用户无法访问。其原理主要基于加密算法(如AES)与密钥管理机制,在操作系统启动前或数据读写时进行实时加解密。这项技术的核心价值在于防止设备丢失或被盗后的数据泄露,尤其对于笔记本电脑和移动设备至关重要。典型的应用场景包括企业办公电脑、存有敏感信息的个人设备以及符合合规性要求的行业。当使用Windows系统自带的BitLocker加密功能时,若因硬件改动、系统更新等触发保护机制,用户可能会面临需要输入恢复密钥才能启动的困境。本文聚

weixin_34006965的博客 492

均匀直线阵的常规波束形成matlab

常规波束形成概述 波束形成是将基阵各阵元输出进行一定的处理,从而形成基阵空间指向性的技术。一个波束形成器可以对空间某方位的信号有响应,而抑制其他方位的信号,所以又被称为空域滤波。一般分为常规波束形成(CBF)和自适应波束形成(ABF)。 常规波束形成较为基础,一般又可以根据实现的途径不同,分为时延波束形成和频移波束形成。 时延波束形成 在各阵元间添加时延使波束控制于不同方位的方法成为时延波束形成。设定一个目标方向,当信号来源方向在该目标方向时,响应最大;信号来源于其他方向时,响应较小。将这种响应大小

Xujing1143的博客 2万+

RuFlo Hooks Automation 实战:用 Claude Code 智能钩子实现多智能体自动编排、记忆协调与持续学习

在 RuFlo(原 Claude Flow)体系中,Hooks Automation 是一套运行在 Claude Code 操作生命周期之上的智能自动化系统:它通过钩子在每个工具调用、会话启停、Git 操作前拦截并接管处理,从而自动完成智能体分配、代码格式化、语法校验、状态持久化、跨会话记忆同步,以及基于成功模式的神经网络训练。本篇技术指南以仓库内的 [Hooks Automation SKILL

gitblog_00288的博客 377

五、MT8168 音频驱动之SPEAKER

本章主要讲解MT8168平台的内部SPEAKER驱动配置。分为HP接法和LINE OUT接法。2.1.3 audio_custom_exp.h设置。2.1.4 mixer_paths.xml设置。2.2.3 mixer_paths.xml设置。2.1.2 ProjectConfig 设置。2.2.2 ProjectConfig 设置。2.2.1 deconfig设置。2.1.1 DTS设置。......

Joon2020的博客 1664

Selenium自动化测试:解决ChromeDriver与浏览器版本匹配难题

在Web自动化测试与数据抓取领域,Selenium作为核心工具,通过WebDriver协议实现对浏览器的控制。其工作原理依赖于一个关键组件——浏览器驱动(如ChromeDriver),它充当了自动化脚本与浏览器内核之间的“翻译官”,负责将标准的WebDriver指令转换为浏览器能理解的开发者工具协议(CDP)。版本严格匹配是保障这一通信链路稳定、避免脚本突然失效的技术基石,直接关系到自动化任务的可靠性与维护成本。尤其在Chrome 115版本后,Google将驱动整合进“Chrome for Testing

weixin_30753873的博客 354

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

openage 测试体系详解:从 C++/Python 单元测试到 Demo 的开发与注册实践

openage 是《帝国时代 II》的现代化开源引擎(仓库根目录 [README.md](https://link.gitcode.com/i/df638ab2e7af297560d57174018187e9)),其测试系统被官方称为 **openage computer-enriched testing automation**,覆盖 C++ 测试、Python 测试、Python doctes

gitblog_00862的博客 405

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Detox 制品系统(Artifacts System)架构深度解析:从配置到落盘的完整实现

本文以 Detox 官方架构文档 [docs/architecture/artifacts.md](https://link.gitcode.com/i/d3c2777258fbae62262c6cf6a2449fef) 为骨架,结合当前仓库 `detox/src/artifacts/` 下的真实源码实现,系统讲解 Detox 测试制品子系统(Artifacts System)的架构设计与工作原理

gitblog_00592的博客 894

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Playwright JS Release Notes 深度解读:从 Test Locks 到 Screencast,1.63–1.57 版本演进与源码佐证

本篇基于仓库中的官方发布说明文档 [release-notes-js.md](https://link.gitcode.com/i/5c1179ad88ea7df1bae60756a36370ac),系统梳理 Playwright for JavaScript 从 1.63 到 1.57 的版本演进主线:每个版本的核心特性、新增 API、破坏性变更与浏览器版本矩阵,并结合 [test.d.ts](

gitblog_00341的博客 368

OpenClaw 浏览器自动化、Exec 与沙箱工具面:Completeness 评分 Rubric 与能力域全解

本文基于 OpenClaw 成熟度记分卡(maturity scorecard)中 `claw-score` 技能的 Completeness 评分准则文件,解析 `browser-automation-and-exec-sandbox-tools` 这一能力面(surface)的三大分类范围、每个功能点的 coverage ID 定义,以及"完整性评分"的判定标准与完整评分工作流。读完后,你可以

gitblog_00853的博客 360

如何在 Windows 上搭建 Selenium 源码开发环境(MSYS2、Visual Studio 与长路径设置)

这篇文章面向想在 Windows 上克隆 Selenium 源码并参与构建的开发者。Selenium 使用 Bazel 作为统一构建工具,Windows 下的开发环境需要额外解决三类问题:Bazel 需要一个类 Unix shell(由 MSYS2 提供)、C++ 工具链定位(由 Visual Studio 提供,例如 IEDriver 等 C++ 组件的编译依赖)、以及 Bazel 大量嵌套目录

gitblog_00347的博客 437
上一篇: 通过多节点安装来启动ZStack
下一篇: ZStack 云环境模拟器
普通网友
博客等级 码龄10年 769粉丝 269原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值