首页 文章 精选 留言 我的

精选列表

搜索[多分片],共10006篇文章
优秀的个人博客,低调大师

多设备兼容脚本,轻松拿捏

👆对私有云感兴趣可以进入公众号回复“私有云”哦。 一、前言 有比较多同学有提到说能否一个脚本同时适用于Android跟iOS设备,也有同学问是否可以根据不同的Android厂商设备,去执行不同的操作,那么本周,我们一起探讨一下这个问题,如何让一个脚本兼容更多的机型~ 二、如何查询所连接的设备信息 2.1 简单分辨iOS设备与Android设备 我们在连接完设备后,可以通过下方的语句查询到我们所连接设备时使用的类是什么,并将该类的名称返回。 device().__class__.__name__.lower() 在Airtest中,Android设备以及iOS设备所使用的类不同,并以系统名作为类名称,所以我们可以直接通过类的名称将其区分开来。 2.2 分辨不同的Android设备厂商以及设备型号 Android设备厂商比较多,我们可以通过下方的adb命令查询的方式去获取我们所连接的设备的相关信息,我们在控制台输入adb shell,进入linux命令行,再输入下方命令,可以看到有我们所需要的设备信息。 adb shell getprop | grep product 但是我们可以根据自己的需求去进行筛选,如我们这里使用到的设备品牌以及设备型号,分别可以通过下方的方式获取 # 获取设备品牌名adb shell getprop ro.product.brand# 获取设备型号adb shell getprop ro.product.model 在代码中,我们使用 python3 的子进程模块 subprocess 的 subprocess.check_output([],text=True) 方法去执行adb命令,其中 text=True 参数表示返回的输出结果是一个字符串,可以直接使用 # 获取设备品牌brand = subprocess.check_output(['adb','shell','getprop','ro.product.brand'], text=True).strip()# 获取设备型号model = subprocess.check_output(['adb','shell','getprop','ro.product.model'], text=True).strip() 三、分辨iOS设备与Android设备案例 # -*- encoding=utf8 -*-__author__ ="Airtest"fromairtest.core.apiimport*auto_setup(__file__)# 定义Android操作函数defandroid_operate():start_app("com.miui.player")# 打开小米音乐APPsleep(3.0)wait(Template(r"tpl1717383819774.png", record_pos=(-0.196, -0.251), resolution=(1080,2400)))touch(Template(r"tpl1717383706465.png", record_pos=(-0.194, -0.242), resolution=(1080,2400)))sleep(3.0)print("已打开小米的音乐APP了")# 定义iOS操作函数defios_operate():frompoco.drivers.iosimportiosPocopoco = iosPoco()poco("播客").click()# 点击播客sleep(1.0)poco("女性畅聊健康生活方式 轻松温暖治愈日常烦恼").click()# 点击女性畅聊健康生活方式sleep(1.0)print("已打开iphone的播客APP了")if__name__ =="__main__":# 获取连接的设备信息platform = device().__class__.__name__.lower()ifplatform =="android":print("当前设备是Android")# 输出当前设备是Androidsleep(3.0)android_operate()elifplatform =="ios":print("当前设备是iOS")# 输出当前设备是iOSsleep(3.0)ios_operate()else:print("当前设备是未知设备")# 输出当前设备是未知设备 四、Android设备分辨不同厂商型号案例 # -*- encoding=utf8 -*-__author__ ="Airtest"fromairtest.core.apiimport*auto_setup(__file__)importsubprocessdefget_android_device_info():try:# 使用 adb shell getprop 获取设备品牌和型号信息brand = subprocess.check_output(['adb','shell','getprop','ro.product.brand'], text=True).strip()# 获取设备品牌model = subprocess.check_output(['adb','shell','getprop','ro.product.model'], text=True).strip()# 获取设备型号returnbrand, modelexceptExceptionase:# 捕获异常print(f"An error occurred:{e}")returnNone,Nonedefopen_vivo_music():start_app("com.android.bbkmusic")# 打开Vivo音乐APPsleep(3.0)wait(Template(r"tpl1717383100103.png", record_pos=(-0.376, -0.051), resolution=(720,1440)))touch(Template(r"tpl1717383106988.png", record_pos=(-0.375, -0.044), resolution=(720,1440)))sleep(3.0)print("已打开Vivo的i音乐APP了")defopen_xiaomi_music():start_app("com.miui.player")# 打开小米音乐APPsleep(3.0)wait(Template(r"tpl1717383819774.png", record_pos=(-0.196, -0.251), resolution=(1080,2400)))touch(Template(r"tpl1717383706465.png", record_pos=(-0.194, -0.242), resolution=(1080,2400)))sleep(3.0)print("已打开小米的音乐APP了")defopen_huawei_music():start_app("com.android.mediacenter")# 打开华为音乐APPsleep(3.0)wait(Template(r"tpl1717384154362.png", record_pos=(-0.388,0.02), resolution=(1080,2340)))touch(Template(r"tpl1717384181392.png", record_pos=(-0.331,0.439), resolution=(1080,2340)))sleep(3.0)print("已打开华为的音乐APP了")defprint_device_info(brand, model):ifbrandandmodel:print(f"当前设备品牌:{brand}")# 打印当前设备品牌print(f"当前设备型号:{model}")# 打印当前设备型号sleep(3.0)else:print("无法获取设备品牌和型号")# 打印无法获取设备品牌和型号if__name__ =="__main__":# 获取 Android 设备品牌和型号brand, model = get_android_device_info()# 获取设备品牌和型号print_device_info(brand, model)# 将打开各类品牌手机APP写成一个字典music_apps = {"HUAWEI": open_huawei_music,# 打开华为音乐APP"vivo": open_vivo_music,# 打开Vivo音乐APP"Xiaomi": open_xiaomi_music# 打开小米音乐APP}#在获取完设备品牌后,在字典内找到对应的方法并执行music_app = music_apps.get(brand)ifmusic_app:music_app()else:print("没有该型号适用的方法") 五、小结 我们本周推文主要是介绍了如何去分辨所连接的设备是Android设备还是iOS设备,以及如何分辨Android设备的厂商和型号,根据这些方式,我们可以结合自己的需求,进一步优化我们的测试脚本以及编写更具有通用性的脚本。 如果在测试的过程中,遇到了问题,或者有任何想要深入了解的知识点,欢迎在官方交流群(526033840)里告诉我们或者提交issue,也欢迎大家投稿其他不同的使用小技巧。 (猜你还想看 ) ▼ Windows技巧:轻松连接多进程窗口之一 Poco框架实操:对节点可实施的操作 打开、关闭、切换App以及清除App进程,操作so easy! 本文分享自微信公众号 - AirtestProject(AirtestProject)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

优秀的个人博客,低调大师

多平台Docker镜像构建教程

云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! Adrian Mouat被誉为Docker Captain,他是Container Solutions 公司的首席科学家。目前,他正开发 Trow,这是一个容器镜像注册中心,用于安全管理 Kubernetes 集群中的镜像流。 当前,Docker 镜像已经成为测试和部署新的第三方软件的标准工具。Adrian 是开源 Trow 注册中心的主要开发者,而Docker 镜像则是人们安装该工具的主要方式。如果他不提供镜像,其他人最终也会推出他们自己的镜像,这样会导致重复"造轮子”,并产生维护问题。 默认情况下,我们创建的Docker 镜像运行在 linux/amd64 平台上。它适用于大多数的开发机器和云提供商,但却忽略其他平台的用户。这个群体很庞大——想想基于树莓派的家庭实验室、生产物联网设备的公司、运行在 IBM 大型机上的组织以及使用低功耗 arm64 芯片的云。 一般来说,这些平台的用户通常会构建自己的镜像或寻找其他解决方案。 那么,你该如何为这些平台构建镜像?最明显的方法是在目标平台上构建镜像。这适用于很多情况。但是如果你的目标是 s390x,我希望你有可以使用的 IBM 大型机。更常见的平台,比如树莓派、物联网设备通常电量有限,速度慢或无法构建镜像。 我们该怎么做?有两个选项:1. 目标平台仿真,2. 交叉编译。有趣的是,我发现有种方法可以将这两个选项结合的效果最好。 1.仿真 让我们从第一个选项——仿真开始。有一个很不错的项目叫 QEMU,它可以模拟很多平台。随着最近 buildx 的预览,将 QEMU 用于 Docker 变得更加容易。 https://www.qemu.org/ https://github.com/docker/buildx QEMU 集成依赖于一个 Linux 内核特性,该特性有个稍显神秘的名字 binfmt_misc handler。当 Linux 遇到其无法识别的可执行文件格式(例如,一个用于不同体系结构的文件格式)时,它将使用该处理程序检查是否配置了什么“用户空间应用程序”来处理该格式(例如,模拟器或 VM)。如果有,它将把可执行文件传递给该应用程序。 为实现这一点,我们需要在内核中注册我们关注的平台。如果你正在使用 Docker Desktop,那么对于大多数常见平台,你就无需做这项工作。如果你正使用 Linux,你可以通过运行最新的docker/binfmt镜像,以与 Docker Desktop 相同的方式注册处理程序,例如: docker run --privileged --rm docker/binfmt:a7996909642ee92942dcd6cff44b9b95f08dad64 完成此操作后,你可能需要重启 Docker。如果你想要对自己想注册的平台有更多控制或想使用更高深莫测的平台(例如 PowerPC),请查看 qus 项目。 https://github.com/dbhi/qus Buildx 有两种不同的用法,但最简单的方法可能是在 Docker CLI 上启用实验性特性(如果你还没有这样做的话),编辑~/.docker/config.json文件,使其包含以下内容: { ... "experimental": “enabled” } 你现在应该能运行docker buildx ls,并得到类似以下的输出: $ docker buildx ls NAME/NODE DRIVER/ENDPOINT STATUS PLATFORMS default docker default default running linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6 让我们为另一个平台构建一个镜像,从 Dockerfile 开始: FROM debian:buster CMD uname -m 如果我们正常构建,运行以下命令: $ docker buildx build -t local-build . … $ docker run --rm local-build x86_64 但是,如果我们显式指定构建针对的平台,则执行以下命令: $ docker buildx build --platform linux/arm/v7 -t arm-build . … $ docker run --rm arm-build armv7l 成功!我们已经成功地在 x86_64 笔记本上构建和运行了 armv7 镜像,并且只做了很少工作。这种技术很有效,但对于更复杂的构建,你可能会发现它运行太慢,或者遇到 QEMU 中的 Bug。在这些情况下,有必要研究一下是否可以交叉编译你的镜像。 2.交叉编译 一些编译器能为 foreign platforms 生成二进制代码,最著名的包括 Go 和 Rust。通过 Trow 注册中心项目,我们发现,交叉编译是为其他平台创建镜像最快、最可靠的方法。例如,这里是 Trow armv7 镜像的 Dockerfile。 https://github.com/ContainerSolutions/trow/blob/master/docker/Dockerfile.armv7 最重要的一行是: RUN cargo build --target armv7-unknown-linux-gnueabihf -Z unstable-options --out-dir ./out 它明确告诉 Rust,我们希望二进制文件在哪个平台上运行。然后,我们可以使用多级构建将这个二进制文件复制到目标体系结构的基本镜像中(如果是静态编译,也能使用 scratch),这样就完成了。然而,对于 Trow 注册中心,我想在最终的镜像中设置更多东西,所以最后阶段实际上开始于: FROM --platform=linux/arm/v7 debian:stable-slim 因此,我实际上混合使用了仿真和交叉编译——交叉编译用来创建二进制文件,仿真用来运行和配置最终的镜像。 3.清单列表 在上面关于仿真的建议中,你可能已经注意到:我们使用--platform参数来设置构建平台,但是我们在 FROM 行中将镜像指定为 debian:buster。这看起来似乎没有意义——平台当然依赖于基本镜像以及它是如何构建的,而不是用户之后的决定。 这样做是因为 Docker 使用了一种叫做清单列表的东西。对于给定镜像,这些列表包含指向不同体系结构镜像的指针。因为官方的 debian 镜像有一个定义好的清单列表,当我在笔记本上拉取这个镜像时,我会自动获得 amd64 镜像,当我在树莓派上拉取它时,我将得到 armv7 镜像。 为了让用户满意,我们可以为自己的镜像创建清单。如果我们回到前面的例子,首先我们需要重新构建并将镜像推送到一个镜像库: $ docker buildx build --platform linux/arm/v7 -t amouat/arch-test:armv7 . … $ docker push amouat/arch-test:armv7 … $ docker buildx build -t amouat/arch-test:amd64 . … $ docker push amouat/arch-test:amd64 接下来,我们创建一个清单列表指向这两个单独的镜像,并推送它们: $ docker manifest create amouat/arch-test:blog amouat/arch-test:amd64 amouat/arch-test:armv7 Created manifest list docker.io/amouat/arch-test:blog $ docker manifest push amouat/arch-test:blog sha256:039dd768fc0758fbe82e3296d40b45f71fd69768f21bb9e0da02d0fb28c67648 现在,Docker 将拉取并运行适合当前平台的镜像: $ docker run amouat/arch-test:blog Unable to find image 'amouat/arch-test:blog' locally blog: Pulling from amouat/arch-test Digest: sha256:039dd768fc0758fbe82e3296d40b45f71fd69768f21bb9e0da02d0fb28c67648 Status: Downloaded newer image for amouat/arch-test:blog x86_64 有树莓派的读者可以试着运行这个镜像,并确认它确实能在那个平台上工作!回顾一下:并不是 Docker 镜像的所有用户都运行 amd64。使用 buildx 和 QEMU,只需额外少量工作就可以为这些用户提供支持。 【云栖号在线课堂】每天都有产品技术专家分享!课程地址:https://yqh.aliyun.com/live 立即加入社群,与专家面对面,及时了解课程最新动态!【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK 原文发布时间:2020-04-14本文作者:Adrian Mouat 本文来自:“InfoQ 微信公众号”,了解相关信息可以关注“InfoQ”

优秀的个人博客,低调大师

Spring Boot -Shiro配置多Realm

核心类简介 xxxToken:用户凭证xxxFilter:生产token,设置登录成功,登录失败处理方法,判断是否登录连接等xxxRealm:依据配置的支持Token来认证用户信息,授权用户权限 核心配置 Shrio整体配置:ShrioConfig.java @Bean public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) { ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(securityManager); Map<String,

优秀的个人博客,低调大师

Shell脚本-控制多主机操作

环境介绍 首先要做到各个主机之间无密ssh连接。这样会最大可能方便的控制。 脚本 命名为status #!/bin/bash params=$@ i=166 for((i=166;i<=169;i++));do echo -------s$i $params ------- ssh s$i "$params" done 测试 [root@s166 bin]# status java -version -------s166 java -version ------- bash: java: command not found -------s167 java -version ------- bash: java: command not found -------s168 java -version ------- bash: java: command not found -------s169 java -version ------- bash: java: command not found What?就给我看这个,它找不到这个命令,那我把它放到/usr/local/bin下 [root@s166 bin]# which java /home/fantj/jdk/bin/java [root@s166 bin]# ln -s /home/fantj/jdk/bin/java java javadoc javah javapackager javaws javac javafxpackager javap java-rmi.cgi [root@s166 bin]# ln -s /home/fantj/jdk/bin/java ./java [root@s166 bin]# ls java jps status xcall.sh [root@s166 bin]# status java -version -------s166 java -version ------- java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0_171-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode) -------s167 java -version ------- bash: java: command not found -------s168 java -version ------- bash: java: command not found -------s169 java -version ------- bash: java: command not found 好了,jps同理,我们只需要把命令创建软连接到/usr/local/bin下即可,每个主机都需要设置的。 效果 [root@s166 bin]# status jps -------s166 jps ------- 12641 Jps 1397 NameNode 1559 SecondaryNameNode 1727 ResourceManager -------s167 jps ------- 1764 DataNode 11610 Jps 1823 NodeManager -------s168 jps ------- 11572 Jps 1815 NodeManager 1756 DataNode -------s169 jps ------- 1813 NodeManager 1754 DataNode 11548 Jps [root@s166 bin]# status ls ~/.ssh -------s166 ls /root/.ssh ------- authorized_keys id_rsa id_rsa.pub known_hosts -------s167 ls /root/.ssh ------- authorized_keys id_rsa id_rsa.pub known_hosts -------s168 ls /root/.ssh ------- authorized_keys id_rsa id_rsa.pub -------s169 ls /root/.ssh ------- authorized_keys id_rsa id_rsa.pub

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册