数据封装

客户端GUI测试技术和自动化测试架构设计简谈

北城余情 提交于 2019-12-08 01:25:47
客户端自动化特点 客户端的自动化,通常做过的人都不是很愿意深入讨论。因为除了功能和逻辑之外,不得不面对各种界面变化,各种和环境交互,各种兼容问题以及想不到灰色地带,就算这样,也找不到太多有效的bug。然而即便如此,客户端的自动化必须去做,尤其是GUI的。它的自动化特点是: 复杂 成本高 不容易发现问题 技术要求高 架构很难通用 下面,从一些基本的东西开始一点点的讨论客户端GUI测试的一些问题和处理办法,以及自动化架构设计的一些思路。事实上就像上面说的,GUI的测试并不是为了发现bug,而是回归的一种方式,作为保证而已——它过了不能说明质量多么好,但是不过,质量肯定不达标。即使在微软内部,客户端的GUI一样不是个受欢迎的家伙,通常用来做BVT的测试(或一些重要性回归,冒烟等)。 客户端自动化简述 这里并不花过多的笔墨介绍什么是客户端,或者如何分类的种种——这些东西教材和网上的东西一坨一坨很多很多,这里可能“漫谈”的,是实际工作中,客户端和GUI自动化中可能遇到的一些底层技术,基本上原理,架构设计方法以及一些项目存在困惑,这些方面的一些处理的方法。 最早的自动化 我个人认为所谓的计算机行业的自动化,是一直跟着这个行业的发展在走,比如下面的这些: 老式计算机——CPU计算: 最早自动解决手工分配穿孔的卡片问题 内存分配任务调度:操作系统的核心就是内存和任务的自动管理 系统配置Loader

专业程序员与业余程序员

99封情书 提交于 2019-12-07 18:54:33
什么时候才能成为一个专业 程序员 呢?三年还是五年工作经验?其实不用的,你马上就可以了,我没有骗你,因为专业 程序员 与业余 程序员 的区别主要在于一种态度,如果缺乏这种态度,拥有十年工作经验也还是业余的。 什么态度?专业态度!也就是星爷常说的专业精神。专业态度有多种表现形式,以后我们会一一介绍的。这里先介绍一下有关形象的态度,专业的 程序员 是很注重自己的形象的,当然 程序员 的形象不是表现在衣着和言谈上,而是表现在代码风格上,代码就是 程序员 的社交工具,代码风格可是攸关形象的大事。 有人说过,傻瓜都可以写出机器能读懂的代码,但只有专业 程序员 才能写出人能读懂的代码。作为专业 程序员 ,每当写下一行代码时,要记得程序首先是给人读的,其次才是给机器读的。你要从一个业余 程序员 转向专业 程序员 ,就要先从代码风格开始,并从此养成一种严谨的工作态度,生活上的不拘小节可不能带到编程中来。 代码风格有很多种,Windows 和Linux都有自己主流的代码风格,每个团队、每个公司也可能有自己的代码风格,争论哪种风格好哪种风格坏根本没有什么意义。有助于其他 程序员 理解的代码风格都是可以接受的,因为遵循特定代码风格的目的就是为了便于交流。 1 命名要展示对象的功能 1.1 文件名 文件名一定要能传达文件的内容信息,别人一看到文件名就能知道文件中放的是什么内容

浅谈Hybrid技术的设计与实现

◇◆丶佛笑我妖孽 提交于 2019-12-07 12:27:37
随着移动浪潮的兴起,各种APP层出不穷,极速的业务扩展提升了团队对开发效率的要求,这个时候使用IOS&Andriod开发一个APP似乎成本有点过高了,而H5的低成本、高效率、跨平台等特性马上被利用起来形成了一种新的开发模式:Hybrid APP。 作为一种混合开发的模式,Hybrid APP底层依赖于Native提供的容器(UIWebview),上层使用Html&Css&JS做业务开发,底层透明化、上层多多样化,这种场景非常有利于前端介入,非常适合业务快速迭代,于是Hybrid火啦。 本来我觉得这种开发模式既然大家都知道了,那么Hybrid就没有什么探讨的价值了,但令我诧异的是依旧有很多人对Hybrid这种模式感到陌生,这种情况在二线城市很常见,所以我这里尝试从另一个方面向各位介绍Hybrid,期望对各位正确的技术选型有所帮助。 Hybrid发家史 最初携程的应用全部是Native的,H5站点只占其流量很小的一部分,当时Native有200人红红火火,而H5开仅有5人左右在打酱油,后面无线团队来了一个执行力十分强的服务器端出身的leader,他为了了解前端开发,居然亲手使用jQuery Mobile开发了第一版程序,虽然很快方案便被推翻,但是H5团队开始发力,在短时间内已经赶上了Native的业务进度: 突然有一天andriod同事跑过来告诉我们andriod中有一个方法最大树限制

JavaSE——(五):封装、继承、多态

雨燕双飞 提交于 2019-12-07 08:42:30
目录 一、封装 1.1、为什么需要封装 1.2、封装属性 1.3、自动封装属性 1.3.1、创建单个 1.3.2、批量创建 二、继承 2.1、 Java继承概要 2.2、为什么需要继承 2.3、实现继承 2.2. Java继承的特征 2.2.1、传递性 2.2.2、单根性 三、构造方法 3.1、构造方法概要 3.2、带参数的构造方法 四、多态 4.1、LSP(里氏代换原则) 4.2、重写(override) 4.3、多态实现 五、示例与视频下载 六、面试题 java面向对象的三大特性是:封装、继承与多态,是面向对象编程的核心。 一、封装 简单说封装就是将同一类事物的特性与功能包装在一起,对外暴露调用的接口。 封装:封装也称信息隐藏,是指利用抽象数据类型把数据和基于数据的操作封装起来,使其成为一个不可分割的整体,数据隐藏在抽象数据内部,尽可能的隐藏数据细节,只保留一些接口使其与外界发生联系。也就是说用户无需知道内部的数据和方法的具体实现细节,只需根据留在外部的接口进行操作就行。 封装的好处: 1) 实现了专业的分工 2) 良好的封装能够减少耦合 3) 类内部的结构能够自由修改 4) 可以对成员进行更精确的控制 5) 隐藏信息,实现细节 1.1、为什么需要封装 定义一个学生类,在类中定义学生身高。 Student类: package com.zhangguo.c41; /**学生类*/

TCP/IP协议栈与数据包封装

痞子三分冷 提交于 2019-12-06 19:35:58
TCP/IP协议栈与数据包封装 TCP/IP网络协议栈分为应用层(Application)、传输层(Transport)、网络层(Network)和链路层(Link)四层。如下图所示(该图出自[TCPIP])。 图 36.1. TCP/IP协议栈 两台计算机通过TCP/IP协议通讯的过程如下所示(该图出自[TCPIP])。 图 36.2. TCP/IP通讯过程 传输层及其以下的机制由内核提供,应用层由用户进程提供(后面将介绍如何使用socket API编写应用程序),应用程序对通讯数据的含义进行解释,而传输层及其以下处理通讯的细节,将数据从一台计算机通过一定的路径发送到另一台计算机。 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation) ,如下图所示(该图出自[TCPIP])。 图 36.3. TCP/IP数据包的封装 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame) 。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。 上图对应两台计算机在同一网段中的情况,如果两台计算机在不同的网段中,那么数据从一台计算机到另一台计算机传输过程中要经过一个或多个 路由器 ,如下图所示

Vue封装公用组件模板

荒凉一梦 提交于 2019-12-06 08:16:54
//vue新手参考套用 //DemoComponent.vue <template> <div> <div>组件</div> </div> </template> <script> import { mapActions } from "vuex"; export default{ name:"demo-component", props:{ prop1:Number, prop2:{ type:String, default:"#333333" }, prop3:{ type:Boolean, default:false } }, data(){ return { testData:"数据1" }; }, created(){ console.log("vue的生命周期--created"); }, watch:{ prop1(val){ console.log("监听属性"); } }, methods:{ ...mapActions([]),//请求接口列表 getData(){ console.log("获取数据"); }, findData(){ console.log("查询数据"); } }, computed:{ isClose(){ return this.prop3; } } } </script> //DemoTemplate.vue <template>

python pickle 模块的使用

 ̄綄美尐妖づ 提交于 2019-12-06 05:34:12
python pickle 模块的使用 用于序列化的两个模块   json:用于字符串和Python数据类型间进行转换   pickle: 用于python特有的类型和python的数据类型间进行转换   json提供四个功能:dumps,dump,loads,load   pickle提供四个功能:dumps,dump,loads,load pickle可以存储什么类型的数据呢? 所有python支持的原生类型:布尔值,整数,浮点数,复数,字符串,字节,None。 由任何原生类型组成的列表,元组,字典和集合。 函数,类,类的实例 pickle模块中常用的方法有: 1. pickle.dump(obj, file, protocol=None,) 必填参数obj表示将要封装的对象 必填参数file表示obj要写入的文件对象,file必须以二进制可写模式打开,即“wb” 可选参数protocol表示告知pickler使用的协议,支持的协议有0,1,2,3,默认的协议是添加在Python 3中的协议3。    Protocol version 0 is the original “human-readable” protocol and is backwards compatible with earlier versions of Python. Protocol version 1

设计模式之美学习(三):封装、抽象、继承、多态分别可以解决哪些编程问题?

主宰稳场 提交于 2019-12-06 03:28:01
理解面向对象编程及面向对象编程语言的关键就是理解其四大特性:封装、抽象、继承、多态。不过,对于这四大特性,光知道它们的定义是不够的,我们还要知道每个特性存在的意义和目的,以及它们能解决哪些编程问题。 封装(Encapsulation) 封装也叫作信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方式(或者叫函数)来访问内部信息或者数据。 对于封装这个特性,我们需要编程语言本身提供一定的语法机制来支持。这个语法机制就是 访问权限控制 。 private 、 public 等关键字就是 Java 语言中的访问权限控制语法。 private 关键字修饰的属性只能类本身访问,可以保护其不被类之外的代码直接访问。如果 Java 语言没有提供访问权限控制语法,所有的属性默认都是 public 的,那任意外部代码都可以通过类似 wallet.id=123 ; 这样的方式直接访问、修改属性,也就没办法达到隐藏信息和保护数据的目的了,也就无法支持封装特性了。 封装的意义是什么?它能解决什么编程问题? 如果我们对类中属性的访问不做限制,那任何代码都可以访问、修改类中的属性,虽然这样看起来更加灵活,但从另一方面来说,过度灵活也意味着不可控,属性可以随意被以各种奇葩的方式修改,而且修改逻辑可能散落在代码中的各个角落,势必影响代码的可读性、可维护性

多条件过滤引发的那些小小疑虑

怎甘沉沦 提交于 2019-12-06 02:58:15
对于希望将 java 作为毕生事业的来说,掌握 java 基础知识是远远不够的,还需要在各种实战项目中提升能力, JavaWeb 项目实战的重要性不言而喻,接下来,我就为你分享一下关于 JavaWeb 项目中多条件过滤相关的内容,希望可以帮到你。 分页查询 需求分析:在列表页面中,显示指定条数的数据,通过翻页按钮完成首页/上一页/下一页/尾页的查询 数据分析: 通过观察,页面上需要显示下面的几个数据: 当前页:currentPage 页面大小:pageSize 总页数:totalPage 首页:1 上一页:prevPage 下一页:nextPage 尾页:endPage 总条数:totalCount 结果集:result 那么,我们应该如何方便快速的将这多个数据共享到页面上呢?答案是:封装 我们应该将这几个参数封装到一个对象中,然后共享这个对象即可,所以,我们有了下面这个类 @Getterpublic class PageResult { public static final PageResult EMPTY_RESULT = new PageResult(Collections.EMPTY_LIST, 0, 1, 3); //1:两传 private int currentPage; private int pageSize; //2:两查 private List<?>

JavaWeb项目之多条件过滤

瘦欲@ 提交于 2019-12-06 02:57:04
相信很多同学在学习 java 基础之后,面对各种项目还是相当头疼,那今天我将手把手教你学会 JavaWeb 项目中的多条件过滤,希望你能在与我实战的过程中积累经验,更进一步。 分页查询 需求分析 : 在列表页面中 , 显示指定条数的数据 , 通过翻页按钮完成首页 / 上一页 / 下一页 / 尾页的查询 数据分析 : 通过观察 , 页面上需要显示下面的几个数据 : 当前页 :currentPage 页面大小 :pageSize 总页数 :totalPage 首页 :1 上一页 :prevPage 下一页 :nextPage 尾页 :endPage 总条数 :totalCount 结果集 :result 那么 , 我们应该如何方便快速的将这多个数据共享到页面上呢 ? 答案是 : 封装 我们应该将这几个参数封装到一个对象中 , 然后共享这个对象即可 , 所以 , 我们有了下面这个类 @Getterpublic class PageResult { public static final PageResult EMPTY_RESULT = new PageResult(Collections.EMPTY_LIST, 0, 1, 3); //1:两传 private int currentPage; private int pageSize; //2:两查 private List<?>