《软件自动化测试成功之道》节选7 - “白+黑” - 检查数据库的数据

手把手教你用CAPL脚本精准测量UDS 0x11复位服务的执行时间(附完整代码) 本文详细介绍了如何使用CAPL脚本精准测量UDS协议中的0x11复位服务执行时间,包括硬件配置、脚本实现及优化技巧。通过自动化测试方案,开发者可以量化ECU复位耗时,提升系统性能验证效率,适用于汽车电子控制单元的开发与测试。 阅读详情

《软件自动化测试成功之道》节选7 - “白+黑” - 检查数据库的数据

http://www.china-pub.com/196509

 

 

 

 

 

 

按照手工测试的习惯,我们一般在测试数据库类型的软件系统时,除了在界面上执行操作,检查各种查询结果之外,还需要登录到后台数据库,查看里面的数据,看是否如预期般修改了数据。同样的,我们在用自动化测试的手段实现这些测试用例时,一样要对后台数据库的数据进行检查。

下面以QTP附带的Flight程序为例说明这种测试方法:

在Flight程序中,对于它的‘New Order’功能的测试可以采用下面的脚本:

//.............................................................................

// 目的:新建订票记录

// 输入参数:

//          DataOfFlight: 飞行日期 ,例如 '121212'

//          FlyFrom: 行起点,例如 'Denver'

//          FlyTo: 飞行终点,例如 'Frankfurt'

//          SelecteFlight: 航班号,例如 '14697'

//          CustomerName: 订票人名,例如 'cnj'

//          Tickets 订票数量,例如 :'1'

// 返回结果:订票号

// 注意事项:

// 作者:陈能技

// 日期:2008-4-25

//.............................................................................

Function NewOrder(DataOfFlight,FlyFrom,FlyTo,SelecteFlight,CustomerName,Tickets);

  var p1 : OleVariant;

  var w1 : OleVariant;

  var w2 : OleVariant;

  var FlightTable, I ,sFlight ,OrderNo: OleVariant;

begin

  p1 := Aliases.Sys.FlightReservationSystem;

  w1 := p1.Window('Afx:400000:b*', 'Flight Reservation').Window('#32770');

  w1.Window('Button', '', 15).ClickButton;

  // 选择飞行日期

  w1.Window('MSMaskWndClass').Keys(DataOfFlight);

  // 选择飞行起点

  w1.Window('ComboBox', '', 1).ClickItem(FlyFrom);

  // 选择飞行终点

  w1.Window('ComboBox', '', 2).ClickItem(FlyTo);

  // 选择航班

  w1.Window('Button', 'FLIGHT').ClickButton;

  FlightTable := NameMapping.Sys.FlightReservationSystem.Window('#32770', 'Flights Table', 1);

  For I:= 0 to FlightTable.Window('ListBox').wItemCount -1 do

  begin

    sFlight := VarToStr(FlightTable.Window('ListBox').wItem[I]);

    IF Pos(SelecteFlight,sFlight)<>0 then

    begin

      FlightTable.Window('ListBox').DblClickItem(I);

      break;

    end;

  end;

  // 输入订票人

  w1.Window('Edit', '', 1).Keys(CustomerName);

  w2 := w1.Window('Edit', '', 2);

  // 输入订票数

  w2.wText := Tickets;

  w1.Window('Button', '&Insert Order').ClickButton;

  // 等待插入数据到数据库完成

  Sleep(10000);

  // 取得订票号,作为返回结果

  OrderNo:= NameMapping.Sys.FlightReservationSystem.Window('Afx:400000:b:10011:6:120d17', 'Flight Reservation', 1).Window('#32770', '', 1).Window('Edit', '', 9).wText;

  Result := VarToStr(OrderNo);

end;

 

// NewOrder函数的使用例子:

Procedure Test_NewOrder;

Var OrderNo : OleVariant;

begin

  OrderNo := VarToStr(NewOrder('121212','Denver','Frankfurt','14697','CNJ','2'));

  Log.Message(OrderNo);

end;

但是上面的脚本仅仅是功能操作,缺乏检查和验证,不知道究竟新增操作是否成功。

在界面上的黑盒测试,一般采用观察或执行查找功能(‘Open Order’)来验证。例如,可使用下面的脚本来实现这种方法:

//.............................................................................

// 目的:查询指定订票号对应的顾客名。

// 输入参数:

//          OrderNumber :订票号。

// 返回结果:

//          CustomerName :顾客名

// 注意事项:

// 作者:陈能技

// 日期:2008-4-25

//.............................................................................

Function QueryOrder(OrderNumber);

  var OrderQueryForm : OleVariant;

  var CustomerName : OleVariant; 

begin

  OrderQueryForm := NameMapping.Sys.FlightReservationSystem.Window('#32770', 'Open Order', 1);

  OrderQueryForm.Window('Button', '&Order No.').ClickButton(cbChecked);

  OrderQueryForm.Window('Edit', '', 2).Keys(VarToStr(OrderNumber));

  OrderQueryForm.Window('Button', 'OK').ClickButton;

  // 如果找不到...

  CustomerName := NameMapping.Sys.FlightReservationSystem.Window('Afx:400000:b:10011:6:120d17', 'Flight Reservation', 1).Window('#32770', '', 1).Window('Edit', '', 1).wText;

  Result := VarToStr(CustomerName);

end;

 

// QueryOrder函数的使用例子:

Procedure Test_QueryOrder;

begin

  Log.Message(VarToStr(QueryOrder('13')));

end;

利用上面的两个脚本函数,可组织成一个完整的测试用例:

uses

  GoToModule,

  Order,

  DBChecker;

 

Procedure ST_NewOrder;

Var OrderNo ,CustomerName: OleVariant;

begin

  OpenVarMenu('File|New Order'); 

  OrderNo := VarToStr(NewOrder('121212','Denver','Frankfurt','14697','CNJ','2'));

  OpenVarMenu('File|Open Order...');

  CustomerName := QueryOrder(OrderNo);  

  If VarToStr(CustomerName)= 'CNJ' then

  begin

    Log.Message('新建订票记录成功!');

  end

  else

    begin

    Log.Message('订票号对应的顾客名不对!');

  end; 

end;

但是,如果项目目前处于开发阶段,New Order功能做好了,但是Open Order功能还没有做好,怎么测试呢?这种时候,前面的方法就不适用了,但是我们可以采用“白+黑”的测试方法,直接检查数据库的数据,看NewOrder功能产生的数据是否正确地插入到后台数据库中了。改成如下脚本:

Procedure ST_NewOrder_AssertDB;

Var OrderNo ,CustomerName,TestResult: OleVariant;

begin

  OpenVarMenu('File|New Order'); 

  OrderNo := VarToStr(NewOrder('121212','Denver','Frankfurt','14697','CNJ','2'));

  //OpenVarMenu('File|Open Order...');  

  //CustomerName := QueryOrder(OrderNo);

  TestResult := AssertDataValue(

    'Provider=Microsoft Jet 4.0 OLE DB Provider;Data Source=C:/Program Files/Mercury Interactive/QuickTest Professional/samples/flight/app/New_flight32.mdb',

    'Orders',

    'Order_Number',

    OrderNo,

    'Customer_Name',

    'CNJ' 

  );

  If TestResult = True then

  begin

    Log.Message('订票记录插入成功!');

  end

  else

  begin

    Log.Message('找不到订票号对应的订票记录');

  end;       

end;

其中,AssertDataValue函数如下所示,AssertDataValue函数用于检查数据表的某条记录中的某字段值是否等于预期值:

//.............................................................................

// 目的:检查数据表的某条记录中的某字段值是否等于预期值

// 输入参数:

//         ConnectionString : 数据库连接串,例如:'Provider=Microsoft Jet 4.0 OLE DB Provider;Data Source=C:/Program Files/Mercury Interactive/QuickTest Professional/samples/flight/app/New_flight32.mdb'

//         TableName :数据表名,例如: 'Orders'

//         SearchField : 查找字段(一般是唯一标识记录行的字段),例如:'Order_Number'

//         SearchValue : 查找的字段值,例如:7

//         AssertField : 检查的字段,例如: 'Customer_Name'

//         AssertValue : 期待值,例如:'Jane Doe'

// 返回结果:

//         True: 找到指定记录。

//         False:未找到指定记录。

// 注意事项:

// 作者:陈能技

// 日期:2008-4-25

//.............................................................................

Function AssertDataValue(ConnectionString , TableName , SearchField ,SearchValue , AssertField ,AssertValue);

var

  Conn, Rs, Fldr , Data , Found : OleVariant;

begin

  Found := False;

  // 创建并打开连接

  Conn := Sys.OleObject['ADODB.Connection'];

  Conn.ConnectionString := ConnectionString;

  Conn.Open();

 

  // 创建并打开记录集

  Rs := Sys.OleObject['ADODB.Recordset'];

  Rs.Open(TableName, Conn, 3 {adOpenStatic},

                            1 {adLockReadOnly}, 2 {adCmdTable});

  // 读取数据

  Rs.MoveFirst();

  while not Rs.EOF do

  begin

    Data := Rs.Fields.Item(SearchField).Value ;

    //Log.Message(Data);

    If VarToStr(Data) = SearchValue then

    begin

      Found := True;

      If VarToStr(Rs.Fields.Item(AssertField).Value) = AssertValue then

      begin

        Log.Message('记录结果与预期值相等。');

      end

      else

      begin

        Log.Error('记录结果与预期值不相等!');

      end;

      break;

    end;

    Rs.MoveNext();

  end;

  // 关闭记录集和连接

  Rs.Close();

  Conn.Close();

  Result := Found;

end;

 

// AssertDataValue函数的使用例子:

procedure Test_AssertDataValue;

Var TestResult :OleVariant;

begin

  TestResult := AssertDataValue(

    'Provider=Microsoft Jet 4.0 OLE DB Provider;Data Source=C:/Program Files/Mercury Interactive/QuickTest Professional/samples/flight/app/New_flight32.mdb',

    'Orders',

    'Order_Number',

    '8',

    'Customer_Name',

    'Jane Doe' 

  );

  Log.Message(TestResult);   

end;

另外,我们还可以封装一个函数,用于检查数据库表的数据行数是否正确:

//.............................................................................

// 目的:检查数据库表的数据行数是否正确。

// 输入参数:

//          ConnectionString :数据库连接串,例如:'Data Source=.;Initial Catalog = Northwind;Persist Security Info = True; User ID =sa;PassWord='

//          SqlString :查询语句,例如'Select * from Orders',

//          ExpectedRowCount :期待查询返回的数据行数,例如 840

// 返回结果:

//          True :表数据行数等于预期行数。

//          False :表数据行数不等于预期行数。

// 注意事项:

// 作者:陈能技

// 日期:2008-4-25

//.............................................................................

Function AssertDataRowCount(ConnectionString,SqlString,ExpectedRowCount);

  var sqlCon,sqlCmd,sqlDataAdapter,ds : OleVariant;

begin

  sqlCon := dotNet.System_Data_SqlClient.SqlConnection.zctor(ConnectionString);

  sqlCon.Open();

 

  sqlCmd := dotNET.System_Data_SqlClient.SqlCommand.zctor_3(SqlString,sqlCon);

  sqlDataAdapter := dotNET.System_Data_SqlClient.SqlDataAdapter.zctor_2(sqlCmd);

  ds := dotNET.System_Data.DataSet.zctor;

  sqlDataAdapter.Fill(ds);

  if ds.Tables.get_Item(0).Rows.Count <> ExpectedRowCount then

  begin

    Log.Error('实际返回行数:' + VarToStr(ds.Tables.get_Item(0).Rows.Count)+' , 不等于预期行数:' + VarToStr(ExpectedRowCount));

    Result := False;

  end

  else

  begin

    Result := True;

  end;

 

  sqlCon.Close();

end;

 

// AssertDataRowCount函数的使用例子:

Procedure Test_AssertDataRowCount;

  var TestResult : OleVariant;

begin

  TestResult := AssertDataRowCount(

    'Data Source=.;Initial Catalog = Northwind;Persist Security Info = True; User ID =sa;PassWord=',

    'Select * from Orders',

    840

    );

  Log.Message(TestResult);

end;

 

 

 

 

《软件自动化测试成功之道》节选7 - “白+黑” - 检查数据库的数据

http://www.china-pub.com/196509

 

Python+AI大模型:5行代码实现智能测试用例生成 大语言模型(LLM)作为人工智能的核心技术之一,通过海量数据预训练获得了强大的自然语言理解和生成能力。其原理基于Transformer架构,通过自注意力机制捕捉文本中的复杂关系。在软件工程领域,LLM的技术价值在于能够将非结构化需求转化为结构化输出,显著提升知识工作的自动化水平。应用场景广泛覆盖需求分析、文档生成和代码辅助等环节。本文聚焦于自动化测试中的测试用例设计环节,探讨如何利用Python结合LangChain等开源框架,通过精心设计的Prompt工程,让AI大模型基于功能描述自动生成覆盖正常、异常、 阅读详情

相关推荐

jumamo本地语音生成工具部署与API调用全流程指南

语音合成技术作为人工智能的重要分支,通过深度学习模型实现文本到语音的自然转换。其核心原理基于声学建模和波形生成,能够模拟人类语音的韵律、语调和情感。在工程实践中,本地部署的语音模型为开发者提供了数据隐私保护和定制化能力,特别适用于内容创作、智能助手开发等场景。以jumamo项目为例,这类工具通常支持音色克隆和情绪控制,通过REST API接口实现程序化调用,满足批量任务处理需求。文本到语音转换和语音克隆技术的结合,为有声读物制作、多语言语音交互等应用提供了完整的解决方案。

weixin_34242819的博客 384

Java+Selenium+TestNG关键字驱动测试框架

在Eclipse新建Java project,并配置好工程中的WebDriver、JUnit、TestNG环境,并导入与Excel操作以及Log4j相关的JAR文件到工程中 在工程中新建四个Packages: cn.summer.configuration:主要用于实现框架中的各项配置 KeyWordsAction.java package cn.outlook.txp.configuration; import java.util.List; import org.apache.log4j.xml.

weixin_44691253的博客 1037

Playwright MCP服务器依赖管理:轻量方案与复杂组件对比

在自动化测试和网页抓取领域,依赖管理是保障项目稳定运行和高效部署的核心环节。其原理在于通过精准控制项目所需的外部库和系统组件,避免因环境不一致导致的‘依赖地狱’问题。良好的依赖管理技术价值在于提升项目的可维护性、降低部署复杂度、优化资源占用,并减少长期技术债。在服务器端应用,特别是基于Playwright的MCP(Model Context Protocol)服务器场景中,依赖选择直接影响服务启动速度、运行稳定性和伸缩能力。本文聚焦于Playwright MCP服务器的环境依赖对比,深入探讨轻量依赖方案与高

diaoju3333的博客 411

《软件自动化测试成功之道》目录

http://www.china-pub.com/196509    项目实践篇第1章 自动化测试的前期准备工作  1.1 选择合适的项目实施自动化测试 1.2 选择合适的测试用例实现自动化 1.3 对控件的熟悉程度与自动化测试成功实施之间的关系1.4 自动化测试计划1.5 自动化测试脚本开发规范1.6 自动化测试计划文档第2章 标准控件的特殊问题的

软件质量优化 2513

google-cli:终端原生语义中枢与本地知识图谱实践

现代AI编程工具的核心瓶颈在于上下文获取链路长、延迟高、安全性弱。CLI工具正从简单命令封装,演进为基于本地AST解析、增量符号索引与动态知识图谱的语义中枢。通过终端原生架构,它实现毫秒级代码理解、跨文件依赖追踪与可插拔模型路由,兼顾性能、隐私与工程可控性。尤其在TypeScript项目中,结合JSDoc注释提取与import图谱构建,显著提升重构、解释与测试生成的准确率。本文深入解析google-cli v2.4的本地知识图谱引擎、workspace-aware提示工程及模型路由机制,展现其作为开发者工作

weixin_33744141的博客 418

基于GPIO模拟UART的嵌入式测试工具:硬件接线与ATtiny26汇编实现

本文围绕GPIO模拟UART发送工具,从硬件接线原理、关键元器件选型、汇编与C语言双版本实现,到PC端数据接收、存储、导出和实时曲线绘制,完整介绍了这套低成本嵌入式测试方案的落地过程。下面从优缺点、适用场景和改进方向三个角度进行总结。

m0_73354873的博客 239

《软件自动化测试成功之道》学习资源

《软件自动化测试成功之道》http://www.china-pub.com/196509      由于本书面向的是有一定基础的自动化测试工程师,因此对于初学者,特地在本书附带的光盘中提供了TestComplete、QTP自动化测试工具的基础培训材料。初学者可在阅读本书之前按照提供的资源先进行学习。 可以到以下地址下载:《软件自动化测试成功之道》随书光盘

软件质量优化 7697

【Codex 深度掌控:从入门到企业级多模型部署】08:AI 编程实战:用 Codex 全栈开发一个 RESTful 微服务

本文以AI编程工具Codex为核心,演示如何用自然语言驱动从零构建一个带JWT认证的Todo RESTful微服务。内容涵盖Express项目初始化、Mongoose数据库建模、CRUD接口、JWT认证中间件、Swagger文档生成及Mocha+Supertest自动化测试,并完整记录交互指令与生成的代码,同时分享Codex高阶使用技巧、踩坑复盘与常见问题解决方案。读者可系统掌握AI辅助编程的真实效能与工作流,获得可直接复用的全栈项目实践指南。适合Node.js后端新手及尝试AI编程的开发者。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 254

技术分享 | 软件项目管理与跨部门沟通协作

本文节选自霍格沃兹测试学院内部教材 项目管理是在项目活动中运用知识、技能、工具和方法,以便达到项目要求。 软件项目管理有其特定的对象、范围和活动,着重关注成本、进度、风险和质量的管理,还需要协调开发团队和客户的关系,协调内部各个团队之间的关系,监控项目进展情况,随时报告问题并督促问题的解决。 软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对人员(People)、产品(Product)、过程(Process)和项目(Project)进行分析和管理的活动。 随着信息技术的飞速发展,软.

软件测试小迷糊 196

《软件自动化测试成功之道》读书笔记.pdf

《软件自动化测试成功之道》相信对于想了解QTP和TestComplete这两种工具的人来说,一定不会陌生,这是对于这本书的读书笔记,希望对大家有所帮助

软件自动化测试成功之道

软件自动化测试成功之道,包括典型工具使用,脚本开源等内容。

AI与软件工程的本质区别:子弹与枪械的协同逻辑

人工智能和软件工程并非竞争关系,而是互补的技术范式:前者解决概率性逼近问题,后者保障确定性系统交付。理解二者在目标设定(统计最优 vs 功能契约)、失败模式(业务目标错位 vs 代码缺陷)、工程实践(模型漂移监控 vs 单元测试覆盖)上的根本差异,是构建可靠AI系统的前提。尤其在MLOps落地场景中,需融合AI的数据敏感性与软件工程的可观测性、可运维性,将黑箱模型封装为符合SLA的服务组件。本文聚焦真实项目中的协作断点与融合路径,帮助工程师规避‘重算法轻工程’或‘拒AI守旧栈’的认知陷阱。

weixin_30781775的博客 421

《软件自动化测试成功之道》随书附带源代码

《软件自动化测试成功之道》随书附带源代码 http://www.china-pub.com/196509

AI Orchestration实战:MuleSoft+LangChain构建企业级AI协作者

AI Orchestration(AI编排)是一种面向企业复杂系统的智能协同架构,其核心原理是将大语言模型的推理能力与企业集成平台的数据治理能力解耦分工——前者专注语义理解与生成,后者承担安全连接、数据聚合与权限管控。这种分层设计不仅规避了LLM直连生产数据库引发的幻觉、越权与合规风险,更赋予AI能力以企业级稳定性、可审计性与可演进性。典型技术价值体现在跨系统语义对齐、细粒度字段级脱敏、Prompt工程产品化及故障域隔离。广泛应用于销售风控、智能客服、合同审查等需融合多源异构数据并满足强监管要求的业务场景。

weixin_30878501的博客 323

从CT扫描到3D模型:手把手教你用NII文件在3D Slicer中重建脊柱(附Verse数据集实战)

本文详细介绍了如何利用NII文件在3D Slicer中从CT扫描数据重建脊柱3D模型的全流程,包括环境配置、数据获取、方向校准、结构分割和模型优化等关键步骤。通过Verse数据集实战演示,帮助医学从业者快速掌握医学图像处理技术,提升临床诊疗与教学效率。

weixin_42651281的博客 202

2025海外代理IP深度横评:Bright Data、IPFoxy、SmartProxy等六大服务商实战对比

本文深度横评2025年六大海外代理IP服务商(Bright Data、IPFoxy、SmartProxy、IPIPGO、Kookeey及青果网络),基于实战测试数据,从IP池质量、速度稳定性、性价比等维度进行对比。针对跨境电商、数据爬虫、社交媒体管理等不同业务场景,提供精准的选购指南与避坑建议,帮助企业用户根据自身需求选择最合适的代理IP解决方案。

weixin_29196891的博客 434

AI提示词工程实战:从CRISPE框架到旅游推荐与人岗匹配应用

提示词(Prompt)是与大型语言模型(LLM)交互的核心指令,其质量直接决定了模型输出的准确性与实用性。通过清晰定义任务目标、上下文和输出格式,提示词能够有效引导模型完成复杂推理、信息提取和内容生成等任务,从而释放AI在工程实践中的巨大潜力。在AI应用开发中,掌握提示词设计是提升开发效率、降低调用成本的关键。本文以CRISPE框架为基础,结合旅游景点推理和人岗匹配逻辑推理两个实战案例,系统拆解了如何构建高效、精准的提示词,并提供了从环境准备、模板设计到迭代优化的完整工程化路径,帮助开发者将提示词工程落地于

weixin_30786657的博客 350

PLc S7-200 smart如何使用Modbus 485通讯传输接收数据

西门子在 STEP 7-Micro/WIN SMART 中正式推出 Modbus RTU 主站协议库(西门子标准库指令)。使用 Modbus RTU 主站指令库,可以读写 Modbus RTU 从站的数字量、模拟量 I/O 以及保持寄存器,从而实现PLC通过modbus方式控制其他器件。提示:以下是本篇文章正文内容,下面案例可供参考。

xjbsw0的博客 6万+

AI驱动编译器开发:从零构建25万行C编译器的工程实践

编译器开发是计算机科学的核心领域,涉及词法分析、语法解析、语义分析和代码优化等关键技术。其原理是将高级语言转换为机器可执行的低级代码,对计算机体系结构有深刻理解。在软件工程中,编译器是系统软件的基石,其技术价值在于优化程序性能、确保代码安全及支持新语言特性。随着大语言模型在代码生成领域的突破,AI正成为软件开发的新引擎。通过构建AI驱动的开发流水线,将传统开发流程转化为“需求分解-AI生成-自动化验证-反馈迭代”的闭环,能够实现复杂软件项目的渐进式构建与自主进化。本文以构建C编译器为例,展示了如何利用大模型

weixin_34297704的博客 367

鸿蒙子系统解读-分布式软总线子系统初步研究(下)

鸿蒙子系统解读-分布式软总线子系统初步研究(下) 本文作者:江苏润和软件股份有限公司 郎建中 3.2. 数据传输 上一节我们看了PublishService()函数的代码实现过程。被发现端发布服务后,软总线回调发布成功的函数中,被发现端需要使用CreateSessionServer()来创建会话的服务器等待发现端的连接创建会话。下面我们就来分析CreateSessionServer()函数的实现过程。 数据传输部分的代码位于foundation/communication/services/softbus

weixin_47070198的博客 3088

【PCIe EP 设备入门学习专栏 -- 8 PCIe EP 架构详细介绍】

Synopsys PCIe 5.0 EP 架构由多个功能模块组成,整体遵循分层 + 模块化设计CXPL(事务层 + 链路层 + 物理层 MAC)XADM(仲裁/生成)、XAIM(应用接口)RADM(过滤/路由/Completion)CDM(配置空间)、PMC(电源管理)、LBC/DBI(寄存器访问)MSG_GEN(消息)、CXS(多芯片一致性)

CodingCos的博客 381

从AI聊天到智能执行:基于LangChain构建能调用工具的AI Agent

在人工智能领域,智能体(Agent)是实现复杂任务自动化的核心技术。其核心原理在于将大语言模型的推理规划能力与外部工具的执行能力相结合,通过任务分解、工具调用和流程编排,使AI从单纯的对话交互升级为能实际解决问题的执行系统。这一技术价值在于突破了传统聊天机器人的局限,让AI能够操作外部系统、执行多步骤规划,从而在智能客服、自动化办公、智能家居控制等广泛场景中发挥实用价值。本文以“当埃琳娜饿了”这一生动场景为例,深入探讨了如何利用LangChain框架,通过定义工具(Tool)、构建Agent执行器、设计提示

weixin_30905981的博客 377

绕过App某加密企业版加固Frida检测

可以发现dlsym函数加载了两次pthread_create,可以认为这两个进程(或某一个进程)是和Frida的检测有关的,于是为了绕过检测,我们可以让它加载一个虚假的pthread_create函数,得到一个空结果绕过检测。成功绕过了libnllvm1717052779924.so的检测,又到了libface_nllvm.so的检测,使用同样的方法去绕过libface_nllvm.so的检测,代码我这里就不上了,大家可以自己修改以下。dlsym()函数的作用是在已经加载的动态链接库中查找指定符号的地址。

墨痕诉清风的博客 1621
上一篇: 《软件自动化测试成功之道》节选6 - 自定义控件的测试方法
下一篇: 《软件自动化测试成功之道》节选8 - 与每日构建结合
TIB
TIB
博客等级 码龄19年 2879粉丝 957原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值