app

APP测试工具

感情迁移 提交于 2020-01-18 04:08:38
1 Appium :AppUI自动化测试 官方网址:http://appium.io 2 Monkey:APP稳定性测试 安装Android SDK,网址下载:https://www.androiddevtools.cn/,具体安装配置,我的其他博客文件中有分享 3 GT:App性能测试 官方网址:https://gt.qq.com/download.html 4 Appscan:APP安全测试 官方网址:https://www.ibm.com/developerworks/cn/downloads/r/appscan/ 来源: CSDN 作者: sunflower_day 链接: https://blog.csdn.net/sunflower_day/article/details/103976268

27.app后端搭建聊天服务器的经历

丶灬走出姿态 提交于 2020-01-18 01:07:03
现在,聊天功能已经成了社交app的标配了。但是,众多web开发出生的程序员对聊天相关的服务的不了解,带来了很多开发上的困扰。在这篇文章中,根据下面3个方面,谈谈聊天服务。 1. 聊天服务的技术选型 2. 开发社交app中,实现聊天服务踩过的坑 3. 那些著名app的聊天服务 1. 聊天服务的技术选型 需要开发聊天服务,首先要选择用到的协议,现在,常用的聊天协议有: (1) xmpp,一个基于xml的消息协议,被广泛应用于Gtalk,Facebook,但缺点也很明显,由于基于xml,会产生大流量。 (2) mqtt,IBM开发的即时通讯协议,一个简单的消息协议,需要自己实现加好友,群聊等IM常见的功能 (3) 类ActivitySync,微信实现的协议,省流量,性能高,但由于是私有协议,IM的所有功能都需要自己实现。 Xmpp协议作为一个被广泛使用的消息协议,有大量的网络资料和成熟开源模块,例如在android和ios上,就很方便集成xmpp协议。IM作为一个复杂的系统,有方方面面需要考虑,使用成熟的协议,能帮助我们避免很多问题,提高了开发效率。 同时,xmpp协议的缺点也很明显,基于xml,造成了费流量。 不信,你瞧: <iq id="rosterset1" type="set"> <query xmlns="jabber:iq:roster"> <item jid="user

Vue全局API总结

不问归期 提交于 2020-01-17 20:30:17
带图原文链接地址: http://www.cnblogs.com/douyae... 1.extend用于创建一个子类Vue,用$mount来挂载 <body> <div id="app"></div> <script> const app=Vue.extend({ template:'<p>{{a}} {{b}} {{c}}</p>', data:function(){ return { a:'Welcome', b:"To", c:"BeiJing" } } }); new app().$mount("#app") </script> </body> 2.Vue.nextTick([callback,context])在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="lib/Vue/vue.development.js"></script> </head> <body> <div id="app"> <button @click="getTag">获取标签内容</button> <h1>{{message}}</h1> </div>

Appium的使用笔记(二)(基本操作)

荒凉一梦 提交于 2020-01-17 18:22:14
主要内容是app的启动,关闭,安装卸载,置于后台,获取元素文本内容,获取元素位置和大小和属性值,滑动屏幕,拖拽,长按和抬起,分辨率和截图,获取和设置手机网络,通知栏操作 1.在脚本内启动其他app 1 #app_package是要打开的包名 2 #app_activity是要打开的进程名 3 driver.start_activity(app_package,app_activity) 2.用appium获取包名和进程名 1 #一般用于打开一个程序后,输出所显示的应用包名和进程名 2 print(driver.current_package) 3 print(driver.current_acivity) 3.如果需要关闭某个应用程序后,再打开新的程序,那么关闭的方法 1 #关闭当前操作的app,不会关闭驱动对象(驱动对象就是在前置代码后设置的driver之类的) 2 driver.close_app() 3 #关闭驱动对象,同时关闭所有关联的app 4 driver.quit() 4.用appium安装和卸载app 1 """安装app""" 2 #app_path是apk的路径 3 driver.install_app(app_path) 4 5 """卸载app""" 6 #app_id是应用程序的包名 7 driver.remove_app(app_id) 8 9 ""

App案例分析

别来无恙 提交于 2020-01-17 05:16:31
APP案例分析 产品:腾讯体育 选择理由:以前看球只能看cctv5,cctv5转播哪场比赛就只能看哪场比赛,有了腾讯体育这个app之后就是我想看什么比赛就能看什么比赛了,这对于球迷来说简直太棒了。 第一部分 调研,测评 描述最简单直观的个人第一次上手体验。 刚点开这个app显示的就是今天体育界发生的大事,一目了然。旁边有各种体育比赛的直播,文字直播,数据统计等。挺好用的。 存在的 bug。 部分用户有时看直播明明有网络但还是提示网络错误 部分用户有时点开app却一直处在引擎启动中 (上述两种情况可遇而不可求,这里不予以截图,望见谅)   3.采访 采访对象的背景:喜欢看球的同学 采访对象的需求:需要看重要比赛的直播 这个用户上课和我一起用这个app看比赛(比赛都在上午,我要好好学习的) 可以和喜欢看球的同学一起看比赛,界面和功能都还可以,就是数据更新有延迟,希望后面能修改,用户体验还不错。 用户对产品的意见是希望取消会员制度,有一些比赛一定要开通会员才能看,会员还很贵。这个问题很严重,希望后面能改正,否则他会失去我这个用户。 结论:好,不错 第二部分 分析 尽可能地使用软件的所有功能 。 对比结果      第三部分 建议和规划 如果你是项目经理,如何提高从而在竞争中胜出? 提高产品质量,界面更美观,内容更丰富,运行更流畅 目前市场上有什么样的产品了? 虎扑体育,直播吧,风云直播等

React-Native 之 GD (二十一)APP 打包

我是研究僧i 提交于 2020-01-17 01:55:00
1.生成一个签名密钥: 在 /android/app 下运行 说明:keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000 注:my-release-key是文件名,my-key-alias是别名。 例如: keytool -genkey -v -keystore GD.keystore -alias GD -keyalg RSA -keysize 2048 -validity 10000 最后会生成一个my-release-key.keystore的密钥库文件。 2.找到路径/android/app/src/main,并在该目录下新建assets文件夹(这个文件夹名字是固定的不能改) 3. 在工程目录下执行以下命令,目的是将 index.android.bundle下载并保存到assets资源文件夹中 第一个终端:执行 react-native start 第二个终端:执行 curl -k "http://localhost:8081/index.android.bundle" > android/app/src/main/assets/index.android.bundle 结果: 4

Vue的学习(4)

人走茶凉 提交于 2020-01-17 01:42:24
1.基于脚手架编写项目 这里引入别人的一些理解,我觉得还不错: 在浏览器打开的瞬间,浏览器中正文部分会瞬间显示index.html中定义的正文部分 < div id = "app" > 来自index . html正文中的内容 < / div > 上面有一个id为app的挂载点,之后我们的Vue根实例就会挂载到该挂载点上; main.js作为项目的入口文件,在main.js中,新建了一个Vue实例,在Vue实例中,通过 import App from './App.vue' new Vue ( { el : '#app' , //告诉vue实例要挂载的地方;(即实例装载到index.html中id为app的元素) components : { App } , //映射组件标签 template : '<App/>' // template: '<App/>'就是代表使用APP组件的模板 } ) 讲解:通过import App from './App.vue’引入当前目录下的App.vue,而components: {App }就是给vue实例添加组件模板,模板就是组件App.vue中的template中的内容。(template会替代原来的的挂载点处的内容) 所以Vue这个实例展示的就是App.vue这个组件的内容。 所以,我们进行总结:在项目运行中,main

Python实现去除APP弹窗

倖福魔咒の 提交于 2020-01-17 01:36:16
在进行APP测试的时候,首次启动或者重置应用后启动,均会有一些权限弹窗出现。手动消除在自动化测试的时候就显得有点不入流了。 因此封装一个方法来进行弹窗的自动处理。 Appium继承于selenium,只是在其添加了APP独有的一些方法和功能,实际上对于各种事件的处理还是来源于selenium中的方法。 import os from appium import webdriver from selenium . webdriver . support . ui import WebDriverWait class Handle : PLATFORM = 'Android' DRIVER_SERVER = 'http://localhost:4723/wd/hub' // 查看机型 deviceName = os . popen ( 'adb shell getprop ro.product.model' ) . read ( ) // 查看版本 platformVersion = os . popen ( 'adb shell getprop ro.build.version.release' ) . read ( ) def __init__ ( self , APP_PACKAGE , APP_ACTIVITY ) : self . desired_caps = {

小程序01

泄露秘密 提交于 2020-01-17 00:55:20
页面目录介绍 |--pages # 所有页面的存放位置 |--index | |--{}index.js # 每个页面的JS文件 | |--index.json # 每个页面的配置 | |--index.wxml # 每个相当于html文件 | |--idnex.wxss # 每个相当于css文件 |--logs |--utils |--util.js # 公共方法存放位置 |--app.js # 全局的app对象文件,启动app |--app.json # 全局的app配置 |--app.wxss # 全局的类似css文件 |--project.config.json # 多人开发统一的配置文件 |--sitemap.json # 关于本app小程序的对外描述信息 app.json全局配置 # 新增页面 在全局的app.json中的pages数组中注册,注意如果是首页的话,必须将注册的文件夹写在最前面的位置才起作用,其后的其他文件夹就会被覆盖掉,不能作为首页使用; { "pages": [ "pages/tests/test", "pages/index/index", "pages/logs/logs" # 末尾的文件夹注册不能加逗号,不然报错 ], # 小程序页面的头部配置 "window": { "backgroundTextStyle": "light", #

appium的log详细分析

孤街醉人 提交于 2020-01-16 23:55:48
下面介绍appium日志的大概分析 //启动appium服务成功 2017-03-24 11:22:49:218 - info: [Appium] Welcome to Appium v1.6.3 2017-03-24 11:22:49:221 - info: [Appium] Non-default server args: 2017-03-24 11:22:49:222 - info: [Appium] log: 'C:\\Users\\LXG\\Desktop\\appium.log' 2017-03-24 11:22:49:270 - info: [Appium] Appium REST http interface listener started on 0.0.0.0:4723 //收到从脚本传递的post请求,将desiredCapabilities参数全部传递给服务端 2017-03-24 11:23:57:842 - info: [HTTP] --> POST /wd/hub/session {"capabilities":{"desiredCapabilities":{"app":"C:\\Users\\LXG\\Desktop\ \zhihunew1.apk","noSign":true,"newCommandTimeout":600,