应用 waPC (rust) 做软件测试工具第三届中国 Rust 开发者大会 应用 waPC (rust) 做软件测试工具 Alan poon 潘泳权 大家好! @rustropy_gaming ruito_89 PhoTto / image / chart Webassembly Procedures Call waPC 协议标准化了本机代码调用 WebAssembly 和 WebAssembly 调用本机代码的通信 (messaging) (messaging) 和 错误处理 (error handling) 。 什么是 waPC? WASM 外部函数 接口 FFI Input type Return type Platform 底层 I32 I32 Unknown waPC &[u8] Result,error > Linux x86_64, macOS x86_64 ,Wi ndows modified request • 模拟数据规则 • 自动化测试 • https://github.com/wasmmock/ wasm_mock_server • 用 rust 打包所有测试需求 Wasm mock server Why use rust ? Software testing tool • 模拟数据规则 • 自动化测试 • Company's own protocol • 0 码力 | 30 页 | 2.50 MB | 1 年前3
Zadig 产品使用手册Rainbond KubeSphere KubeVela 面向资源管理的运维工具集 面向开发者,需结合 CI/CD 工具额外 搭建全流程能力 专门面向开发者的生产力平台,涵盖需求到开 发,测试,运维的云原生一体化技术底座支撑 云厂商 DevOps 平台 华为云 DevCloud 阿里云效 腾讯 CODING 云厂商引流为主,锁定风险高 对多云跨地域支持不够 实施负担较重难以推广 Zadig 核心特性: 运维 真正意义的持续交付:以工程师体验为核心,价值交付为理念,完成需求到发布的全路径。 测试 发布 洞察 一堆复杂脚本、维护成本极高 员工手工操作费时费力易出错 手动更新服务、手动打包、交付 付效率低下、占据大量研发时间 、研发利用率极低 环境不透明、测试效率低下、测 试有效性低、大量手工、价值难 以体现 上下游烟囱式、协作效率低、团 队花大量时间在碎片化沟通和流 碎片化:手工协作 + 复杂工具链 工程化:一个平台 一键发布 工作流、环境配置自动更新、高 效调试、消除手工操作、精准快 速迭代、研发生产力 / 幸福感提 升 自助运行、系统化管理、自动化 程度高、测试有效性提升、质量 有保障、横向赋能、技能提升 随时调用工程基线提供的能力、 产品视角开发交付、团队高效协 同、稳定迭代 产研数字化过程数据透明、关键 指标易抽取、有能力合理调动资 源、随时决策响应客户需求0 码力 | 52 页 | 22.95 MB | 1 年前3
Go读书会第二期• 变长参数函数妙用 • 方法的本质、 receiver 参数类型选择、方法集 合 Go 程序逻辑的基本承载单元 Part5 – 语法核心:接口 践行哲学,遵循惯例,认清本质,理解原理 • 接口的内部表示 • 接口设计 • 接口与组合 接口:一切皆组合 Part6 – 语法核心:并发编程 践行哲学,遵循惯例,认清本质,理解原理 • 并发设计 vs. 并行设计 • 并发原语的原理与应用模式 • 优化 if err != nil • Panic 不是错误处理 错误处理:保守与创新 Part8 – 编程实践:测试、调试与性能剖析 践行哲学,遵循惯例,认清本质,理解原理 • Go 测试惯例与组织形式 • 模糊测试 (fuzzing test) • 性能基准测试、度量数据与 pprof 剖析 • 调试实践 聚焦编码之外的 Go 工具链使用实践 Part9 – 标准库、反射与0 码力 | 26 页 | 4.55 MB | 1 年前3
新一代分布式高性能图数据库的构建 - 沈游人索引 LSM-Tree 容灾保障 ( BR ) 元数据层 事务管理 MVOCC 计算层 Cypher AST 优化器 图计算 内存加速引 擎 服务接口 HTTP/RPC Spark 连接器 Python UDF 执行器 索引管理 一致性存储 RAFT 分片管理 元数据 集群管理 用户权限 GNN 应用层 Atlas 图平台 例如,对于属性的存储,可以通过自行序列化 / 反序列化大幅节省内存 • 而自定义存储格式往往需要内存的精细操作,由于 Rust 允许在 unsafe 下访问裸指针, 可以实现零开销读取 • 将 Unsafe 包裹,对外提供足够的接口 i32 i64 u32 u32 string string 定长 变长 高可用技术方案 基于 Chain Replication ( CRAQ ) 算法实现,进行数据副本处理,头 结点写,多结点读,支持读写分离 强大的跨平台能力,在不同架构 下可以准确的控制代码行为 编译期间对生命周期检查确保内 存安全,无 GC 和运行时损耗 01 完善的测试类型支持,包括单元 测试、集成测试、基准测试等 02 03 和文档系统以及 CI/CD 工具的良 好集成 完整的断言系统 异步协程 零成本抽象 强大的测试框架 REPL 命令行客户端 WebUI 面向分析师,提供图模型定义、数据管理、图查询分析、服务状态监控、用户管理能力0 码力 | 38 页 | 24.68 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 08 CUDA 开启的 GPU 编程的数组,返回其起始地址 • void deallocate(T *p, size_t n) // 释放长度为 n ,起始地址为 p ,类型为 T 的数组 抽象的 std::allocator 接口 • vector 会调用 std::allocator的 allocate/deallocate 成员 函数,他又会去调用标准库的 malloc/free 分配和释放内存空间 (即他分配是的 不要偷懒少打一个 f 哦,否则影响性能。 • 完成同步之后,和 CPU 算出来的比较差值, 看看 GPU 算的是否准确无误,从右边的输出 可以看到基本是一致的。 测试一下时间 • 使用第六节课中的 ticktock.h 测试一下 CPU 和 GPU 的用时。 • 注意,这里一定要把 TOCK 放到同步之 后。原因之前说过,因为对 GPU 核函数 的调用是异步的,只有 cudaDeviceSynchronize() 0 码力 | 142 页 | 13.52 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 17 由浅入深学习 map 容器,内存管理与对象生命周期 10. C++ 异常处理机制的前世今生 我们都要认真鞋习哦 我们都要认真鞋习哦 第一章:读取与写入 我负责监督你鞋习 ! 我负责监督你鞋习 ! map 查找元素的两个接口 • map 提供了两个查找元素的接口,一曰 [] ,二曰 at 。 • 那么他们两个又有什么区别呢?很多新手都分不清他俩,可能只认识 [] 。 读取 map 元素 • mapm; 。而如果另一个同学是硬核的计算 机思维,相当于 C++ 的一视同仁 API ,他会以为小彭老师真的在吃答辩。 • 这是通常来说,不过万一小彭老师真的这么重口味在吃答辩呢?要怎么传达这个信息? C++ 一视同仁的接口就能处理这种罕见的情况,不过 Python 用一些 if 语句套一套一样可以。 深入理解 Python 中 [] 能自动区分是读是写的原理 • 写入要创建元素,而读取则要在元素不存在时出错,确实应该是两个不同的函数。 简单粗暴的 Java 用法 • 与 Python 和 C++ 不同, Java 放弃了花里胡哨的运算符重载,索性都采用成员函数 get put 来表示,非常明确。主要是为了把 get 和 put 作为接口函数,可以对应多个具体 实现。 错误示范 • 小彭老师说过,读取必须用 at 。 • 而这位同学却用了 [] 来读取 items 里的值。 • 乍看之下好像没错,运行结果也是正确的,但 这只是碰巧你的 0 码力 | 90 页 | 8.76 MB | 1 年前3
Rust 异步并发框架在移动端的应用 - 陈明煜移动端诉求:易用性 • IO 密集性任务与 CPU 密集型任务融合 异步并发框架如 tokio 大多用于处理大量 异步 IO 场景,而 CPU 密集型任务一般 使用 rayon 。 当前单框架提供的接口无法使用户在一个 任务中同时处理 IO 任务以及 CPU 任 务。 Incompatibility of the third party Runtime with Mobile 现有框架无法完美适配移动端(二) queue task New task Global queue New task take & run take & run Worker take & run Steal & run 两种接口拥有两套割裂的调度模式和线程池 华为 Ylong 异步并发框架 Ylong Runtime 并发框架 华为 Rust 异步并发框架,近期计划在 OpenHarmony 上开源。与 Tokio 类似,同样为事 类似,同样为事 件驱动型调度框架,提供异步 IO 、定时器、同步原 语等功能。但额外提供: 任务优先级调度 异步并行迭代器 结构化并发 Ylong Runtime 对外 接口 APP/SA 调度器 提 交 任 务 Async function CPU Task CPU Task IO Task IO Task Executor 高 中 低 线程池 Reactor0 码力 | 25 页 | 1.64 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 05 C++11 开始的多线程编程std::unique_lock 或 std::lock_guard 的第二个参数,这时他们会默认 mtx 已经 上锁。 std::unique_lock 和 std::mutex 具有同样的接口 • 其实 std::unique_lock 具有 mutex 的所有成员函数: lock(), unlock(), try_lock(), try_lock_for() 等。除了他 会在解构时按需自动调用 这种只要具有某些指定名字的成员函数,就判断一个 类是否满足某些功能的思想,在 Python 称为鸭子类 型,而 C++ 称为 concept (概念)。比起虚函数和 动态多态的接口抽象, concept 使实现和接口更加解 耦合且没有性能损失。 第 4 章:死锁 同时锁住多个 mutex :死锁难题 • 由于同时执行的两个线程,他们中发生的指令不 一定是同步的,因此有可能出现这种情况:0 码力 | 79 页 | 14.11 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 13 C++ STL 容器全解之 vector况下,只用最简单的接口(首地址指针) 就完成了遍历和打印的操作。 迭代器模式 • 使用指针和长度做接口的好处是,可以通 过给指针加减运算,选择其中一部分连续 的元素来打印,而不一定全部打印出来。 • 比如这里我们选择打印前三个元素(去掉 了最后一个元素,但不必用 pop_back 修 改数组,只要传参数的时候修改一下长度 部分即可)。 迭代器模式 • 使用指针和长度做接口的好处是,可以通0 码力 | 90 页 | 4.93 MB | 1 年前3
Zadig 面向开发者的云原生 DevOps 平台架构 开发 测试 运维 运维 / 开发 技术支持 事件 需求设计 架构设计 拆任务、写代码 代码集成 xN 单元测试验证 xN 代码扫描 xN 自测、联调 xN 集成验证 xN 写测试用例 系统验证 xN 自动化测试 xN 性能测试 xN 安全测试 xN 数据变更 xN 代码变更 xN 配置变更 xN 部署测试环境 xN 小时 服务一:设计 | 代码编写 | 构建 | 测试 | 部署 | 发布 服务二:设计 | 代码编写 | 构建 | 测试 | 部署 | 发布 服务三:设计 | 代码编写 | 构建 | 测试 | 部署 | 发布 以前:面向代码片段的串行交付 现在:面向多个服务编排的产品级自动化并行交付 | 构建 | 部署 | 测试 | 发布 服务二: 服务定义 | 构建 | 部署 | 测试 | 发布 服务三: 服务定义 | 构建 | 部署 | 测试 | 发布 代码一: 代码编写 | 构建 | 部署 | 测试 | 发布 代码二: 代码编写0 码力 | 59 页 | 81.43 MB | 1 年前3
共 23 条
- 1
- 2
- 3













