android常用测试框架,Android自动化测试基础精讲—App自动化测试与框架实战(4)

6.1.4 adb常用命令

讲述了adb技术的组织结构之后,下面就介绍常用的adb命令。首先,如前所述,将手机连接到PC,通过命令行启动adb进程。

1.adb调试命令

1)adb devices

因为adb可以同时管理多个Android设备,所以adb命令的一般形式如下。

adb[-e|-d|-s]子命令

如果设备只有一个模拟器实例或者一台Android设备,可以省略-e、-d、-s等选项。

如果设备有多台模拟器实例和多台Android设备,使用-s来区分要执行adb子命令的设备或者模拟器。

如果设备只有一个模拟器实例和一台Android设备,可以通过-e(emulator)或者-d(device)来选择是在模拟器还是Android设备上执行adb子命令。

adb devices命令的执行结果如图6-8所示。

67a91326a1aa25ac77d0e979b1c13819.png

图6-8  adb devices命令的执行结果

执行结果中部分选项的含义如下。

" d300be9d:序列号,adb创建的字符串,通过它唯一地识别一个模拟器/设备实例。

" device:状态。offline表示没有与adb相连接或者无法响应;no device表示没有模拟器/设备运行;device表示有模拟器/设备运行。

-s后需要跟设备序列号,可以通过"adb devices"获得。

2)adb forward

要发布端口,命令如下。

adb forward tcp:####tcp:####

用户可以设置任意的端口号,作为主机向模拟器或Android设备的请求端口。一个模拟器/设备实例的某一特定主机端口向另一个端口转发请求。下面演示了如何实现从主机端口5555到模拟器/设备端口8000的请求转发。

adb forward tcp:5555 tcp:8000

这样所有发往5555端口的数据都会被转发到8000端口上。

3)adb kill-server

要停止adb服务器,命令为kill-server,如图6-9所示。

在某些情况下,用户可能需要终止Android调试系统的运行,然后再重新启动它。例如,如果Android调试系统不响应命令,则可以先终止服务器,然后再重启,这样就可能解决这个问题。

7c2e698667668b57008327992e3490e2.png

图6-9  通过adb关闭进程

4)adb start-server

要启动adb服务器,命令为start-server,如图6-10所示。

2105024efee154d5bb530f98d998fe14.png

图6-10  通过adb启动服务器

2.adb连接命令

1)adb connect

要连接某个设备,常用命令如下。

adb connect [:]

如果在测试过程中PC的USB端口有限,不可能一直使用USB模式测试Android设备,则可以通过Wi-Fi的形式完成PC和Android设备的连接。

前提条件是PC和手机都已连接同一个Wi-Fi,并且手机通过USB和PC相连。

接下来,执行如下步骤。

(1)输入"adb devices"命令验证PC通过USB模式成功连接手机设备,如图6-11所示。

(2)在tcpip模式下重启adb端口5555。

adb tcpip 5555

执行结果如图6-12所示。

5f0cb2da9f50d1077fe90f83ee5b2a05.png

(3)查找手机的IP地址。以Oppo手机为例,选择"设置"→"关于手机"→"状态消息"→"IP地址"。这里IP地址设置为192.168.1.123,如图6-13所示。

5551337877a444c38c66f99689718e5d.png

图6-13  在手机上查看IP地址

(4)连接到手机IP地址。

adb connect 192.168.1.123

连接结果如图6-14所示。

f56cb975b52ae8cc7336edfc69939510.png

图6-14  连接指定IP地址

(5)输入命令"adb devices"验证是否成功连接手机和PC,如图6-15所示。

9906835f9fa927805559496c785acb01.png

图6-15  验证通过Wi-Fi是否成功连接手机和PC

(6)通过以下命令断开连接。

adb disconnect 192.168.1.123

执行结果如图6-16所示。

e3b975caa9a1059d865c24488906b1ba.png

图6-16  断开连接

2)adb USB

在USB连接模式下重启adb服务器。

3.adb包管理命令

1)adb install

要安装软件,命令的一般形式如下。

adb install

install命令要求指定所要安装的.apk文件的路径。如果要将com.baidu.searchbox_ 38032640.apk安装到移动设备上,则需要指定apk文件所在位置的全路径。提示信息Success表示安装成功,如图6-17所示。

7b49f569edc350dc9ea24a9e7043517e.png

图6-17  adb install命令

2)adb uninstall

要卸载软件,命令的一般形式如下。

adb uninstall

adb uninstall -k

这里,-k参数表示卸载软件但是保留配置和缓存文件。要卸载com.baidu.input_miv6包,命令如图6-18所示。

df07633f1c528171b6d59b887d8c0725.png

图6-18  通过adb卸载软件

卸载软件需要指明软件的包名。软件包名可以使用adb logcat命令获取,后面章节会详细描述相关内容。

3)adb shell pm

命令pm的全称是package manager,可以使用pm命令执行应用的安装并查询一些安装包的常用信息。以下命令用于列出所有安装的包信息。

adb shell pm list packages

执行结果如图6-19所示,读者显示的信息可能和本书有差异,因为不同的手机或模拟器环境下的结果可能不同。

db17ddaaa32125acffb9335516662700.png

图6-19  通过pm获取已安装包名

其中参数描述如下所示。

版权声明:51Testing软件测试网获人民邮电出版社和作者授权连载本书部分章节。

任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。

22/2<12

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非扫描版的《自动化测试技术领航》 精通QTP:自动化测试技术领航 《精通QTP:自动化测试技术领航》共分为6章,书中实例新颖、趣味性强、案例贴近实际,在逼真的软件测试模拟项目环境下试验。   第1章和第2章帮助读者系统地学习QTP最实际的应用。第1章将需要掌握的自动化测试知识依次讲解,这是精心设计的内容。掌握了这些基本技能后就可以进入第2章的学习,里面涵盖了大量真实的模拟项目的例子,以及做项目时需要的一些QTP技术和技巧。学通这两章,读者就可以独自承担起自动化测试的脚本开发工作。第3章和第4章让读者深度掌握QTP应用。包括项目应用高级扩展实例精讲和QTP深入探索,学会了这些技术,读者才会有更多的底蕴,也是一个很重要的跨越阶段。第5章和第6章讲解了设计模式和自动化测试框架的内容,这两章内容是QTP测试技术精华的浓缩,如QTP设计模式和自动化测试框架。   另外,《精通QTP:自动化测试技术领航》在第1章至第4章精心设置了习题,帮助读者巩固已学的内容,也给读者一些练习的素材。建议读者用心完成以后再参考提供的答案,效果会更佳!   很多测试朋友在论坛中常问各种各样的QTP问题,但发现很多问题其实都是大同小异的,《精通QTP:自动化测试技术领航》在最后以附录的形式把经典的疑难问题浓缩成“QTP科普问答典藏30例”,它涵盖了一些很值得关注的软件测试实战技术。   《精通QTP:自动化测试技术领航》适合初学者、测试工程师、QTP项目开发人员、QTP架构师、测试经理、培训师等,也适合学校相关专业的教学用书。
robotframework⾃动化测试修炼宝典_RobotFramework原理精 讲 Robot Framework是⼀款python编写的功能⾃动化测试框架。具备良好的可扩展性,⽀持关键字驱动,可以同时测试多种类型的客户端或 者接⼝,可以进⾏分布式测试执⾏。 RF框架是基于python 的,所以⼀定要有python环境。robotframework 本质就是python的⼀个模块,安装它的命令是: pip install robotframework 谈到RF就要介绍⼀下Robot framework-ride, 它是⼀个图形界⾯的⽤于创建、组织、运⾏测试的软件。Ride也是⼀个Python的模块,安 装它的命令是: pip install robotframework-ride 从RIDEv1.7.3.1开始⽀持python3(兼容Python 2.7 和 >=3.6)。Ride并不是RF的核⼼模块,但是使⽤Ride,因为它友好的UI设计,提⾼ 了⽤户的体验和⽤例的编写效率。下图1是Ride UI页⾯,⽽图2是与图1对应的RF的脚本页⾯。 图1.Ride UI页⾯ 图2.RF的脚本页⾯ ⽤过RF的同学都深有体会,RF真是⽆所不能,可以做web⾃动化测试、移动端⾃动化测试、windows⾃动化测试,接⼝⾃动化测试,全⾯ 覆盖测试领域。在这⾥我就重点解析⼀下RF的⽆所不能。它之所以让⼤家感觉到⽆所不能,是因为在这个框架中我们可以⽅便的使⽤各种 扩展类库。想使⽤Robotframework实现不同的功能,那么就要先安装与其功能对应的类库并导⼊使⽤类库。扩展库的安装⽅法与安装 python模块⼀样,使⽤pip命令即可。例如安装selenium扩展库的命令如下:pip install robotframework-seleniumlibrary。 安装成功后,在[PYTHON⽬录]Libsite-packagesSeleniumLibrary⽬录下可以找到扩展库。然后我们就可以在RF中引⼊ SeleniumLibrary进⾏web相关的⾃动化测试了,做web⾃动化测试并不是RF的api实现的,⽽是RF借⽤selenium的api实现的。同理,我 们可以使⽤appiumlibrary做Android和iOS测试,其本质使⽤的是appium;使⽤HTTP library做http请求发送和解析测试,其本质使⽤ requests模块。使⽤autoitlibrary做Windows的GUI测试,其本质使⽤AutoIt。总之RF就是⼀个基础框架,提供⽤例管理,⽤例运⾏以及 ⽣成测试报告等测试基础功能,然后你想做哪⽅⾯的测试就需要安装对应的python模块,⽽我们的RF本⾝并不提供例如web测试、移动 测试和接⼝测试的功能。 使⽤RF确实可以⼤幅度地提升⾃动化测试效率,但是对于测试⼩⽩来讲我真⼼不建议⼤家从RF开始上⼿⾃动化测试,因为这个框架的封 装,使得⼤家在完全不需要编码的前提下,就能够完成基础的⾃动化测试⼯作,⽽⽬前编码是测试⼈员的刚需,⾃动化测试⼜是测试⼈员提 升编码的最佳实践,所以⼤家上⼿⾃动化测试还是先从Selenium或者appium⼊门,待编码技能成熟后再使⽤RF也为时不晚。
Spring+SpringMVC+MyBatis框架技术整合是目前Java企业级应用开发中最为流行的技术组合之一。在这个技术组合中,Spring负责IoC和AOP,SpringMVC则是MVC框架,而MyBatis则是ORM框架。 下面是一个简单的整合案例: 1. 首先,我们需要创建一个Maven项目,并添加Spring、SpringMVC和MyBatis的依赖: ```xml <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.3.RELEASE</version> </dependency> <!-- Spring MVC --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.3.RELEASE</version> </dependency> <!-- MyBatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.5</version> </dependency> ``` 2. 接着,我们需要配置Spring、SpringMVC和MyBatis的配置文件。在这里,我们使用注解方式配置Spring和SpringMVC,而使用XML方式配置MyBatis。 Spring配置文件: ```java @Configuration @ComponentScan(basePackages = "com.example") @EnableWebMvc public class AppConfig { // ... 配置其他Bean @Bean public DataSource dataSource() { // 配置数据源 return new DriverManagerDataSource(); } @Bean public SqlSessionFactory sqlSessionFactory() throws Exception { SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource()); // 配置MyBatis插件 Interceptor[] plugins = {pageHelper()}; sessionFactory.setPlugins(plugins); // 配置MyBatis映射文件 sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources("classpath*:mapper/*.xml")); return sessionFactory.getObject(); } @Bean public MapperScannerConfigurer mapperScannerConfigurer() { MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer(); scannerConfigurer.setBasePackage("com.example.mapper"); scannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory"); return scannerConfigurer; } @Bean public PageInterceptor pageHelper() { PageInterceptor pageInterceptor = new PageInterceptor(); Properties properties = new Properties(); properties.setProperty("helperDialect", "mysql"); pageInterceptor.setProperties(properties); return pageInterceptor; } } ``` SpringMVC配置文件: ```java @Configuration public class WebConfig implements WebMvcConfigurer { // ... 配置其他内容 @Bean public ViewResolver viewResolver() { // 配置视图解析器 InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setPrefix("/WEB-INF/views/"); viewResolver.setSuffix(".jsp"); return viewResolver; } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { // 配置静态资源 registry.addResourceHandler("/static/**") .addResourceLocations("/static/"); } @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } } ``` MyBatis配置文件: ```xml <configuration> <typeAliases> <!-- 配置别名 --> <package name="com.example.model"/> </typeAliases> <mappers> <!-- 配置映射文件 --> <mapper resource="mapper/userMapper.xml"/> </mappers> <!-- 配置分页插件 --> <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <property name="helperDialect" value="mysql"/> </plugin> </plugins> </configuration> ``` 3. 接着,我们需要创建Controller和Mapper接口以及对应的视图和映射文件。这里我们以用户管理为例: UserController.java: ```java @Controller @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @RequestMapping(value = "/list", method = RequestMethod.GET) public String list(Model model) { List<User> users = userService.getAllUsers(); model.addAttribute("users", users); return "user/list"; } @RequestMapping(value = "/add", method = RequestMethod.GET) public String addForm() { return "user/add"; } @RequestMapping(value = "/add", method = RequestMethod.POST) public String add(User user) { userService.addUser(user); return "redirect:/user/list"; } @RequestMapping(value = "/edit/{id}", method = RequestMethod.GET) public String editForm(@PathVariable("id") Long id, Model model) { User user = userService.getUserById(id); model.addAttribute("user", user); return "user/edit"; } @RequestMapping(value = "/edit", method = RequestMethod.POST) public String edit(User user) { userService.updateUser(user); return "redirect:/user/list"; } @RequestMapping(value = "/delete/{id}", method = RequestMethod.GET) public String delete(@PathVariable("id") Long id) { userService.deleteUser(id); return "redirect:/user/list"; } } ``` UserMapper.java: ```java public interface UserMapper { List<User> getAllUsers(); User getUserById(Long id); void addUser(User user); void updateUser(User user); void deleteUser(Long id); } ``` userMapper.xml: ```xml <mapper namespace="com.example.mapper.UserMapper"> <resultMap id="userMap" type="com.example.model.User"> <id property="id" column="id" /> <result property="name" column="name" /> <result property="age" column="age" /> </resultMap> <select id="getAllUsers" resultMap="userMap"> SELECT * FROM user </select> <select id="getUserById" resultMap="userMap"> SELECT * FROM user WHERE id = #{id} </select> <insert id="addUser" useGeneratedKeys="true" keyProperty="id"> INSERT INTO user(name, age) VALUES(#{name}, #{age}) </insert> <update id="updateUser"> UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id} </update> <delete id="deleteUser"> DELETE FROM user WHERE id = #{id} </delete> </mapper> ``` 4. 最后,我们需要配置web.xml文件,启动Spring容器和SpringMVC DispatcherServlet。 web.xml: ```xml <web-app> <display-name>MyApp</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/config/spring/appConfig.java</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/config/spring/webConfig.java</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> ``` 这样,我们就完成了Spring+SpringMVC+MyBatis框架技术的整合。在实际开发中,我们可以根据需求进行修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值