了解->熟悉->掌握->精通

为之,则难者亦易矣;不为,则易者亦难矣。
私信 关注
>=FreeMan=<
码龄14年

All things are difficult before they are easy.

  • 19,034,781
    被访问量
  • 488
    原创文章
  • 17
    作者排名
  • 2,613
    粉丝数量
  • 于 2006-11-09 加入CSDN
获得成就
  • 获得508次点赞
  • 内容获得87次评论
  • 获得678次收藏
荣誉勋章
兴趣领域
  • #算法
    #排序算法
  • #后端
    #Java#C/C++#Python
TA的专栏
  • Data Structure
    36篇
  • Algorithm
    33篇
  • C
    22篇
  • Java
    234篇
  • Python
    32篇
  • Software Development
    55篇
  • Software Testing
    38篇
  • C++
    16篇
  • C#
    8篇
  • DB
    5篇
  • OS
    2篇
  • Web
    3篇
  • Q&A
    2篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

C - getfloat: the floating-point analog of getint

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net/* * getfloat: the floating-point analog of getint. * * GetFloat.c - by FreeMan */#include <stdio.h>#include <ctype.h>#include <math.h>#define BUFFERLEN
原创
6阅读
0评论
1点赞
发布博客于 11 小时前

C - getint: perform free-format input conversion by breaking a stream of characters into integer

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net/* * getint: perform free-format input conversion by breaking a stream of characters * into integer values, one integer per call. * * GetInt.c - by FreeMan */#include <ct
原创
4阅读
0评论
1点赞
发布博客于 12 小时前

C - Quick Sort (one of the simplest)

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net/* * Quick Sort: * * Given an array, one element is chosen and the others partitioned in two subsets * - those less than the partition element and those greater than or equal t
原创
19阅读
0评论
1点赞
发布博客于 6 天前

C - Reverse Polish Calculator

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net/* * A reverse Polish calculator * * ReversePolishCalculator.c - by FreeMan */#include <stdio.h>#include <stdlib.h> /* for atof() */#define MAXOP 100 /* max si
原创
9阅读
0评论
1点赞
发布博客于 6 天前

C - atof: Extend atof to handle scientific notation of the form 123.45e-6

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net/* * atof: Extend atof to handle scientific notation of the form 123.45e-6. * * AtoF_Scientific.c - by FreeMan */#include <stdio.h>#include <ctype.h>double ato
原创
4阅读
0评论
1点赞
发布博客于 7 天前

C - atof: convert string to its double-precision floating-point equivalent

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net/* * atof: convert string to its double-precision floating-point equivalent. * * AtoF.c - by FreeMan */#include <ctype.h>double atof(char s[]){ double val, power;
原创
8阅读
0评论
1点赞
发布博客于 7 天前

C - static关键字的作用

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net在C语言中,static关键字用来定义全局静态变量、局部静态变量及静态函数。定义全局静态变量在全局变量前面加上关键字static,该全局变量就变成了全局静态变量。全局静态变量有以下特点:该变量在全局数据区分配内存 如果没有初始化,其默认值为0 该变量在本文件内从定义开始到文件结束可见定义局部静态变量在局部变量前面加上关键字static,该
原创
25阅读
0评论
1点赞
发布博客于 7 天前

C - itoa: convert a number to a character string (the inverse of atoi)

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net/* * itoa: convert a number to a character string (the inverse of atoi). * * ItoA.c - by FreeMan */void itoa(int n, char s[]){ int i, sign; if ((sign = n) < 0) /* recor
原创
13阅读
0评论
1点赞
发布博客于 12 天前

C - atoi: convert a string of digits into its numeric equivalent

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net/* * atoi: convert a string of digits into its numeric equivalent. * * AtoI.c - by FreeMan */int atoi(char s[]){ int i, n; n = 0; for (i = 0; s[i] >= '0' && s[
原创
14阅读
0评论
1点赞
发布博客于 12 天前

C - Shell Sort

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net/* * Shell Sort: sort v[0]...v[n-1] into increasing order * * The basic idea of this sorting algorithm, is that in early stages, far-apart * elements are compared, rather than
原创
9阅读
0评论
1点赞
发布博客于 12 天前

C-escape(s,t) that converts characters into visible escape sequences as it copies the string t to s

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net/* * Write a function escape(s,t) that converts characters like newline and tab into * visible escape sequences like
and \t as it copies the string t to s. * Write a function
原创
18阅读
0评论
1点赞
发布博客于 13 天前

C-squeeze(s1,s2) that deletes each character in s1 that matches any character in string s2

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net/* * Write a function squeeze(s1,s2) that deletes each character in s1 * that matches any character in string s2. * * Squeeze.c - by FreeMan */#include <stdio.h>void
原创
31阅读
0评论
1点赞
发布博客于 1 月前

C-Convert a string of hexadecimal digits into its equivalent integer value

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net/* * Write a function htoi(s), which converts a string of hexadecimal digits * (including an optional 0x or 0X) into its equivalent integer value. * The allowable digits are 0 t
原创
21阅读
0评论
1点赞
发布博客于 1 月前

C-Wrap very long lines of input into two or more shorter lines

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net/* * Write a program that wraps very long lines of input into two or more shorter lines. * * WrapLine.c - by FreeMan */#include <stdio.h>#define MAXLINE 1024 /* max i
原创
32阅读
0评论
1点赞
发布博客于 2 月前

C-Check a C program for rudimentary syntax errors

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net/* * Write a program to check a C program for rudimentary syntax errors like * unmatched parentheses, brackets and braces. Don’t forget about quotes, * both single and double, e
原创
28阅读
0评论
1点赞
发布博客于 2 月前

C-Remove all comments from a C program

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net/* * Write a program to remove all comments from a C program. * Don’t forget to handle quoted strings and character constants properly. * C comments don’t nest. * * RemoveComm
原创
23阅读
0评论
1点赞
发布博客于 2 月前

C-Reverse character string

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net/* * Write a function reverse(s) that reverses the character string s. * * Reverse.c - by FreeMan */#include <stdio.h>#define MAXLEN 128 /* maximum length of the stri
原创
29阅读
0评论
1点赞
发布博客于 2 月前

C-Print a histogram of the frequencies of different characters in its input

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net/* * Write a program to print a histogram of the frequencies of different characters in its input. * * Histogram_CharFreq.c - by FreeMan */#include <stdio.h>int main(
原创
42阅读
0评论
1点赞
发布博客于 2 月前

C-Print a histogram of the lengths of words in its input

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net/* * Write a program to print a histogram of the lengths of words in ts input. * * Histogram.c - by FreeMan */#include <stdio.h>#define MAXWORDLEN 16#define IN
原创
60阅读
0评论
1点赞
发布博客于 2 月前

C-确定char、short、int、long、long long、float和double的范围

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net/* * Range.c - by FreeMan */#include <stdio.h>#include <limits.h>float getFloat(char sign, unsigned char exp, unsigned mantissa);double getDouble(char sign, uns
原创
74阅读
0评论
1点赞
发布博客于 2 月前

Java-A correct behavior custom class loader

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netIt is possible to load and reload classes at runtime in Java, though it is not as straightforward as one might have hoped. This text will explain when and how you can load and reloa
原创
60阅读
0评论
1点赞
发布博客于 2 月前

Java-ThreadLocal(看这一篇就够了)

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net1、什么是ThreadLocalThreadLocal class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one (via its get or set
原创
83阅读
0评论
1点赞
发布博客于 2 月前

Java-由源代码分析Spring AOP的实现原理

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net什么是AOPAOP(Aspect-OrientedProgramming,面向切面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许
原创
64阅读
0评论
1点赞
发布博客于 3 月前

Java-Spring IoC 原理总结

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netSpring容器高层视图Spring 启动时读取应用程序提供的 Bean 配置信息,并在 Spring 容器中生成一份相应的 Bean 配置注册表,然后根据这张注册表实例化 Bean,装配好 Bean 之间的依赖关系,为上层应用提供准备就绪的运行环境。上图中,Bean 缓存池由 HashMap 实现。IoC容器介绍Spring 通过一个配置
原创
74阅读
0评论
1点赞
发布博客于 3 月前

Java-简明命名规范

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net项目名:全部小写。包名:全部小写,单词间不要用字符隔开。若为公司项目,包名格式为:com.公司名.项目名.模块名;若为个人项目,包名格式为:pers.发起者名.项目名.模块名。类名:每个单词首字母大写。抽象类命名使用 Abstract开头。变量名:首字母小写,其余的每个单词首字母大写。方法名:首字母小写,其余的每个单词首字母大写。常量名:.
原创
89阅读
1评论
1点赞
发布博客于 3 月前

C-简明命名规范

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net变量的命名规范1、变量的命名规则要求使用“匈牙利法则”。即开头字母用变量的类型,其余部分用变量的英文意思或英文的缩写,要求单词的第一个字母应大写。即:变量名=变量类型+变量的英文意思(或英文缩写)。变量定义尽量可能放在函数的开始处。bool:用b开头,如bExistint:用i开头,如iCountshort int:用n开头,如nStepCount
原创
162阅读
1评论
2点赞
发布博客于 3 月前

Python-筛选回数

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net#!/usr/bin/env python3# -*- coding: utf-8 -*-def is_palindrome(n): return str(n) == str(n)[::-1]# Testoutput = filter(is_palindrome, range(1, 1000))print('1~1000:', lis
原创
38阅读
0评论
1点赞
发布博客于 3 月前

Python-求素数序列

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net#!/usr/bin/env python3# -*- coding: utf-8 -*-# Print prime numbers within 1000def main(): for n in primes(): if n < 1000: print(n, end=' ') .
原创
62阅读
0评论
1点赞
发布博客于 3 月前

Python-str2float

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net#!/usr/bin/env python3# -*- coding: utf-8 -*-from functools import reduceCHAR_TO_FLOAT = { '0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6,
原创
64阅读
1评论
1点赞
发布博客于 3 月前

Python-str2int

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net#!/usr/bin/env python3# -*- coding:utf-8 -*-from functools import reduceCHAR_TO_INT = { '0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6,
原创
66阅读
1评论
1点赞
发布博客于 3 月前

Java-通俗易懂地理解HashMap的原理

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net一、HashMap的节点HashMap是一个集合,键值对的集合,源码中每个节点用Node<K,V>表示。 static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key;
原创
75阅读
0评论
1点赞
发布博客于 3 月前

Python-实现trim函数

#!/usr/bin/env python3# -*- coding: utf-8 -*-def trim(s): if s[:1] == ' ': return trim(s[1:]) if s[-1:] == ' ': return trim(s[:-1]) return s# 测试if trim('hello ') != 'hello': print('测试失败!')elif trim(' hello') != 'h.
原创
88阅读
0评论
1点赞
发布博客于 3 月前

Python-求一元二次方程ax^2+bx+c=0的两个解

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net#!/usr/bin/env python3# -*- coding: utf-8 -*-import mathA = float(input('a = '))B = float(input('b = '))C = float(input('c = '))def quadratic(a, b, c): for i in (a, b
原创
477阅读
2评论
1点赞
发布博客于 3 月前

Python-全局变量、局部变量、类变量、实例变量

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net全局变量在模块内、所有函数外、所有class外的变量局部变量在函数内或在class的方法(类方法、静态方法、实例方法)内,且变量前没有任何修饰的变量类变量在class内,且不在class的方法内的变量实例变量在class的方法内,且使用self修饰的变量...
原创
52阅读
0评论
1点赞
发布博客于 3 月前

Python-简明命名规范

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net模块应该是简短的、小写的名字。如果下划线可以改善可读性可以加入。包与模块的规范相同。文件名全小写,可使用下划线。类总是使用首字母大写单词串,如MyClass。内部类可以使用额外的前导下划线。函数和方法函数名应该为小写,可以用下划线以增加可读性。如:my_function。函数和方法的参数...
原创
69阅读
0评论
1点赞
发布博客于 3 月前

Java - equals和==的区别

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net==是一个比较运算符,基本数据类型比较的是值,引用数据类型比较的是地址值(即是指是否为同一个对象的引用)。equals()是一个方法,只能用于比较引用数据类型。重写前比较的是地址值,重写后比较的一般是对象的属性。...
原创
41阅读
0评论
1点赞
发布博客于 4 月前

Spring Boot-SpringApplication.run方法执行流程详解

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netSpringApplication 是将一个典型的 Spring 应用启动的流程“模板化”,在没有特殊需求的情况下,默认模板化后的执行流程就可以满足需求。但如果有特殊需求也没关系,SpringApplication 在适当的流程结点开放了一系列不同类型的扩展点,我们可以通过这些扩展点对 SpringBoot 程序的启动和关闭过程进行扩展。最直接的扩展是 S
原创
163阅读
0评论
1点赞
发布博客于 4 月前

App测试与Web测试的区别

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net单纯从功能测试的层面上来讲的话,App测试与Web测试是没有本质区别的。但根据两者载体不一样,则区别如下:系统架构方面Web项目,B/S架构,客户端就是浏览器;只要更新了服务器端,客户端就会同步更新。App项目,C/S架构,必须要有相应的App客户端;App修改了服务端,则App客户端所有核心版本都需要进行一遍回归测试。...
原创
282阅读
0评论
1点赞
发布博客于 5 月前

MySQL-使用自增ID主键与UUID主键的优劣比较

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net从单实例和分布式架构两种部署方式下来说明。(1)单实例或者单节点组通过对500W、1000W的单机表进行测试,自增ID主键性能高于UUID,磁盘存储费用比UUID节省一半的钱。所以在单实例上或者单节点组上,使用自增ID作为首选主键。(2)分布式架构场景从节点组的规模划分如下:20个节点组以下的小型规模的分布式场景,为了实现快速部署,可以采用
原创
97阅读
0评论
1点赞
发布博客于 5 月前

Python-What exactly do “u” and “r” string flags do?

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netThere's not really any "rawstring"; there are rawstring literals, which are exactly the string literals marked by an'r'before the opening quote.A "raw string literal" is a sli...
原创
81阅读
0评论
1点赞
发布博客于 6 月前

Selenium-WebDriver的工作原理

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net首先来了解一下Selenium WebDriver系统中的三个角色:1. WebDriver API(基于Java、Python、C#等语言)比如,对于Java来说,就是对应的Selenium WebDriver的Jar包。2. 浏览器的驱动(Browser Driver)比如,Chrome浏览器的Driver为:chromedriver.ex
原创
163阅读
0评论
1点赞
发布博客于 6 月前

SQL Server - Difference between TRUNCATE, DELETE, and DROP in SQL Server

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netTRUNCATETRUNCATE SQL query removes all rows from a table, without logging the individual row deletions. TRUNCATE is faster than the DELETE query.The following example removes al
原创
91阅读
0评论
1点赞
发布博客于 6 月前

Software Automation Testing - 自动化测试框架设计思路

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net在开始设计之前,首先需要考虑以下几个方面:1、使用该框架写出来的自动化测试案例,需要给开发、手动测试、可能还有客户查看,所以写的测试案例需要尽量的清晰明了,不要有太多复杂逻辑,以及要有比较好的可读性。2、使用这个框架做自动化的人,不会有太深的编程能力,所以要提供足够好的,最好是傻瓜化的测试点验证方法,以及很好的异常容错处理能力。3、测试框架最好是A
原创
221阅读
0评论
0点赞
发布博客于 6 月前

Software Automation Testing - 浅谈自动化测试框架设计

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net1、什么是自动化测试框架?它是由一个或多个自动化测试基础模块、自动化测试管理模块、自动化测试统计模块等组成的工具集合。以常见的前端UI测试为例,一个测试框架大概包括测试对象,测试组件,基础类和函数,工具类,测试数据,异常处理,测试日志,断言和测试报告等这些模块。在设计测试框架的时候,我们要尽可能的将这些模块有机的结合起来,将脚本能够有效的组织、连贯
原创
181阅读
0评论
0点赞
发布博客于 6 月前

Software Automation Testing - 如何设计自动化测试框架

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net什么是自动化测试框架什么是框架特指为解决一个开放性问题而设计的具有一定约束性的支撑结构。在此结构上可以根据具体问题扩展、安插更多的组成部分,从而更迅速和方便地构建完整的解决问题的方案。框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法。也就是说框架本身不解决特定的问题,它是通过扩展的各种组件或者工具来解决问题,并且它可以方便的添加
原创
308阅读
0评论
1点赞
发布博客于 6 月前

Software Automation Testing - API自动化测试框架介绍与对比

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netAPI自动化框架有哪些,他们之间有何区别另外,现阶段流行推荐使用:Python+unittest+requests+HTMLTestRunner框架二、Java Rest-assured框架Java Rest-assured 是使用代码来实现接口的请求,封装业务流程,对于公司的业务支持比较高,灵活度很强,可以通过代码的方式打造自己公司的接口自动
原创
305阅读
0评论
1点赞
发布博客于 6 月前

Software Automation Testing - UI自动化测试框架对比选型

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net我们是如何选择的?条件1:支持移动端app自动化从以上对比其实已经可以比较明确的帮助大家做出自己的选择,从我所在的团队来讲,我们主要做的是移动端的UI自动化,相信现在大多数同学所做的也都是这一类的自动化,因此,仅限于PC端webApplication的几个框架就不可避免的要排除掉了,这其中包含Selenium,PhantomJS,以及KARMAR。
原创
266阅读
0评论
1点赞
发布博客于 6 月前

Software Automation Testing - Web UI 自动化测试技术选型

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net对于 UI 自动化测试来说,许多所谓框架之间并没有太多差别,也从来不是影响整套测试用例是否健壮的关键性因素。相比之下,如何提高测试用例稳定性以及出现错误时 debug 的便捷性才是让 UI 自动化测试方案落地的重要细节。那么为什么我们还需要讨论技术选型呢?我们看看技术选型包含哪些部分先。通常 UI 自动化测试的技术方案分为控制(控制客户端)、执行(运行
原创
239阅读
0评论
1点赞
发布博客于 6 月前

Web-Nginx简介

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netNginx是一款高性能轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like协议下发行。其特点是占有内存少,并发能力强,事实上Nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用Nginx的网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。Nginx可以在大多数 Unix Linux OS 上编译运行
原创
244阅读
0评论
1点赞
发布博客于 6 月前

Java-log4j.properties配置详解与实例

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net一、Log4j简介Log4j有三个主要的组件:Loggers(记录器):日志类别和级别 Appenders(输出目标):日志要输出到的地方 Layouts(布局):日志以何种形式输出1.1 LoggersLoggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG <
原创
214阅读
0评论
1点赞
发布博客于 6 月前

Software Performance Testing-压力测试时需要注意的一些细节

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net环境首先环境是非常重要的,需要尽可能跟生产环境靠近。比方说,使用同样的Nginx版本,php的话需要启用fpm,zend-optimizer等等,参数配置也最好跟生产环境保持一致。当然,php的版本更加需要保持一致,不能说线上是跑5.3,而测试环境却是php 7;除非是要测试不同php版本的性能。网络也需要注意,测试机跟服务器之间是什么网络连接
原创
178阅读
0评论
1点赞
发布博客于 6 月前

Software Performance Testing-如何做压力测试?

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net压力测试的流程如下:明确测试目标 制定测试计划 实施测试,收集参数 分析测试结果 给出优化方案一 、明确测试目标如果是客户的需求,那需要向客户确认,有清楚的性能指标参数,测试时就是保证系统达到该指标并能良好运转,即压力测试。如果是自己的系统需要有一个评估,那就需要完整的得到该系统的几个临界点,拿到完整的性能曲线,从而来分析部署情况,即为性能测
原创
188阅读
0评论
1点赞
发布博客于 6 月前

Java - Apollo客户端用法

Apollo支持API方式和Spring整合方式,该怎么选择用哪一种方式?API方式灵活,功能完备,配置值实时更新(热发布),支持所有Java环境。 Spring方式接入简单,结合Spring有N种酷炫的玩法,如 Placeholder方式: 代码中直接使用,如:@Value("${someKeyFromApollo:someDefaultValue}") 配置文件中使用替换placeholder,如:spring.datasource.url: ${someKeyFromApollo:s
原创
371阅读
0评论
1点赞
发布博客于 6 月前

Java - MyBatis知识点整理

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netMyBatis是什么MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects)映射成数据库中的记录。
原创
247阅读
0评论
2点赞
发布博客于 6 月前

Java-Dubbo知识点整理

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net1、Dubbo是什么Dubbo 是一个分布式、高性能、透明化的 RPC 服务框架,提供服务自动注册、自动发现等高效服务治理方案, 可以和 Spring 框架无缝集成。RPC 指的是远程调用协议,也就是说两个服务器交互数据。2、Dubbo的由来互联网的快速发展,Web应用程序的规模不断扩大,一般会经历如下四个发展阶段。单一应用架构:当网站流量
原创
409阅读
0评论
1点赞
发布博客于 7 月前

Java-理解volatile关键字

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net一、内存模型如果一个变量在多个CPU中都存在缓存(一般在多线程编程时才会出现),那么就可能出现缓存不一致的问题。缓存不一致性问题通常有以下2种解决方法:1、通过在总线加LOCK锁的方式CPU和其他部件进行通信都是通过总线来进行的,当总线上发出了LCOK锁的信号,那么只有等待代码完全执行完毕之后,其他CPU才能从变量所在的内存读取变量,然后进行相
原创
185阅读
0评论
2点赞
发布博客于 7 月前

Software Performance Testing-Locust入门

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netLocust是什么Locust是一个容易使用、分布式的压力测试工具。它适用于网站(或其它系统)的压力测试,并找出系统可以承载的用户量。在测试过程中,策略就是一个Locust的蠕虫将会攻击你的网站。每一个Locust的行为(或你使用的测试用户)是你自己定义的,并且蠕虫进程会在一个网页视图中被实时监测。这样会帮助你来实现测试,在真实用户使用前定义系统的瓶颈
原创
202阅读
0评论
1点赞
发布博客于 7 月前

Software Performance Testing-nGrinder简介

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netnGrinder是一个用于在多台机器上运行用Jython(在JVM上运行的Python)编写的测试脚本的应用程序。它的内部引擎是基于Grinder。nGrinder分别用控制器和Agent将Grinder的控制台和Agent包装起来,并扩展了支持多个并发测试的特性。nGrinder系统架构nGrinder系统架构nGrinder由两个主要组件组成
原创
177阅读
0评论
1点赞
发布博客于 7 月前

Java - Spring Boot 概述

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net什么是 Spring Boot?Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,使开发者能快速上手。Spring Boot 有哪些优点?Spring Boot 主要有如下优点:容易上手,提升开发效率,为 Spring
原创
202阅读
0评论
1点赞
发布博客于 7 月前

Software Performance Testing - Gatling测试脚本编写

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net脚本示例import io.gatling.core.Predef._import io.gatling.http.Predef._import scala.concurrent.duration._class BaiduSimulation extends Simulation { // 设置请求的根路径 val httpConf =
原创
204阅读
0评论
1点赞
发布博客于 7 月前

Software Performance Testing - Gatling基本使用

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net介绍Gatling是一款基于Scala开发的高性能服务器性能测试工具,它主要用于对服务器进行负载等测试,并分析和测量服务器的各种性能指标。目前仅支持http协议,可以用来测试web应用程序和RESTful服务。Gatling拥有以下特点:支持Akka Actors和Async IO,从而能达到很高的性能 支持实时生成html动态轻量报表,从而使报表
原创
188阅读
0评论
1点赞
发布博客于 7 月前

Software Development - 配置管理简介

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net什么是配置管理配置管理是对软件生产过程中的各类工作产品进行管理的办法,要做这个工作之前,应该先理清楚到底会有什么工作产品,这些工作产品的依赖关系是怎样的,哪些是重要的工作产品,不同的工作产品需要什么层次的管理。大概有以下的管理层次:不需要管理的。 需要保存起来便可。 要保存起来,并且要对访问权限进行控制,可能某些人只能读,某些人能读写。 需要
原创
172阅读
0评论
1点赞
发布博客于 7 月前

Software Development - 版本管理基础知识

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net什么是版本管理版本管理是指为满足不同需求,对同一产品或系统进行局部的改进和改型所产生的产品或系统系列的变更情况进行记录、跟踪、维护和控制的过程。其主要功能有:集中管理档案,并带有安全授权机制:档案集中存放在服务器上,经系统管理员授权给各个用户。用户通过Check In和Check Out的方式访问服务器上的文件,未经授权的用户则无法访问服务器上的文件.
原创
204阅读
0评论
1点赞
发布博客于 7 月前

Software Performance Testing - JMeter压测ZooKeeper

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net在JMeter中采用自定义Java请求的方式来实现:结合自己的业务,搞清楚如何用Java操作ZooKeeper 如何将自己写的jar包让JMeter识别关于第2点,需要我们在创建类的时候去继承AbstractJavaSamplerClient抽象类或者是实现JavaSamplerClient接口。AbstractJavaSamplerClient抽
原创
177阅读
0评论
1点赞
发布博客于 7 月前

ZooKeeper入门知识点

ZooKeeper是什么ZooKeeper是一个分布式服务框架,是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。简单来说,ZooKeeper=文件系统+监听通知机制。1、文件系统ZooKeeper维护一个类似文件系统的数据结构。每个目录被称作为ZNode,和文件系统一样,我们能够自由的增加、删除ZNode,在一个ZNode下增加、删除子ZNode,唯一的不同在于ZNode
原创
159阅读
0评论
1点赞
发布博客于 7 月前

Java - 中间件简介

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net1、中间件的定义Java中间件是处理数据间交互,连接数据分离后两个系统间的通信的软件。中间件不属于任何一个开发项目,就是让我们对应用系统间或者数据库间数据流通无感知。2、中间体应用的基本领域远程过程调用(RPC:Remote Process Call)和对象访问中间件这种中间件主要解决分布式环境下应用的互相访问问题,这也是支撑应用服务化功能的基
原创
291阅读
0评论
1点赞
发布博客于 7 月前

Software Performance Testing - Nginx压测优化

Nginx优化的思路Nginx响应请求的主要过程是:1、建立Socket连接;2、打开文件,并沿Socket返回排查问题时,要注意观察上面这两点。问题现象Socket/File: Can’t open so many files原因分析:Linux是有文件句柄限制的,而且Linux默认不是很高,一般都是1024,生产服务器用其实很容易就达到这个数量。解决办法:下面是修改 ulimit 限制数的方法:1.首先你得修改nginx.conf配置文件,在定义error.log日志
原创
194阅读
0评论
1点赞
发布博客于 7 月前

Software Performance Testing - 全链路压测知识点整理

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net什么是全链路压测基于实际的生产业务场景、系统环境(生产环境),模拟海量的用户请求和数据对整个业务链(通常是核心业务链)进行压力测试,并持续调优的过程。为什么要做全链路压测原因在于真实的业务场景下,每个系统的压力都比较大,而系统之间是有相互依赖关系的,单机压测没有考虑到依赖环节压力都比较大的情况,会引入一个不确定的误差。这就好比,我们要生产一个仪表,
原创
873阅读
0评论
1点赞
发布博客于 7 月前

Software Testing-Selenium:What is the solution of error session deleted because of page crash

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netThere are diverse solution to this issue. This issue can be solved by either of the following solutions:1. Add the followingchrome_options:chromeOptions.addArguments("--no-san.
原创
13502阅读
0评论
1点赞
发布博客于 9 月前

Java-What is PATH and CLASSPATH?

The PATH and CLASSPATH are two most important environment variables of Java environment which is used to find the JDK binaries used to compile and run Java in windows and Linux and class files which are compiled Java bytecodes. From my personal experience
原创
14166阅读
0评论
1点赞
发布博客于 9 月前

Java-What is classpath and how to set it?

When programming in Java, you make other classes available to the class you are writing by putting something like this at the top of your source file:import x.x.MyClass;Or sometimes you 'bulk import' stuff by saying:import x.x.*;So later in your
原创
14124阅读
0评论
1点赞
发布博客于 9 月前

What is UTF-8?

UTF-8 is a variable-width character encoding standard that uses between one and four eight-bit bytes to represent all valid Unicode code points.UTF-8 BasicsUTF-8 (Unicode Transformation–8-bit) is an encoding defined by the International Organization fo
原创
13924阅读
0评论
1点赞
发布博客于 9 月前

Java - Comparing enum members: == or equals()?

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netCan==be used onenum?Yes: enums have tight instance controls that allows you to use==to compare instances. Here's the guarantee provided by the language specification (emphasis
原创
18917阅读
0评论
1点赞
发布博客于 9 月前

Software Testing - Browser Driver在Selenium中的作用是什么

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netBrowser Driver一般是一个EXE(可执行)程序,或者浏览器的扩展程序,它使用HTTP Server持续监听Selenium2 Commands,其功能主要有:从客户端(执行自动化脚本的计算机)接收HTTP Request 确定Selenium Commands对应的用户操作 发送操作信息到浏览器 获取浏览器返回的执行状态信息 发送执行状
原创
14704阅读
0评论
1点赞
发布博客于 9 月前

Java - JDBC Best Practices

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netIn this guide, I would like to explain JDBC Best Practices. We can follow these best practices in the day to day project work...
原创
23121阅读
0评论
1点赞
发布博客于 1 年前

Java - Naming Conventions

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netJava naming conventionsare sort of guidelines that application programmers are expected to follow to produce a consistent an...
原创
23045阅读
0评论
1点赞
发布博客于 1 年前

Software Development - 正则表达式风味(引擎)对比

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net正则表达式风味(引擎)说明风味是规范,引擎是实现。名称 说明 应用.NET 由System.Text.RegularExpressions相关类提供的正则引擎。 基于 .Net 的语言和软件。如 C#, Visual Basic.Net, F#, Powershell, Delphi for .NET 等。Java 由java.util.re
原创
31814阅读
0评论
1点赞
发布博客于 1 年前

Java - 正则表达式(看这一篇就够了)

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net简介在编写处理字符串的程序时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。说明:计算机诞生初期处理的信息几乎都是数值,但是时过境迁,今天我们使用计算机处理的信息...
原创
32592阅读
6评论
5点赞
发布博客于 1 年前

Java - The Event Model

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netWhat is anevent?Aneventis a signal received by a program from the operating system as a result of some action taken by t...
原创
34680阅读
0评论
1点赞
发布博客于 2 年前

Java - Guide to the Fork/Join Framework

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net1. OverviewThe fork/join framework was presented in Java 7. It provides tools to help speed up parallel processing by attem...
原创
34371阅读
0评论
1点赞
发布博客于 2 年前

Java - A Guide to the ExecutorService

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net1. OverviewExecutorServiceis a framework provided by the JDK which simplifies the execution of tasks in asynchronous mode....
原创
34447阅读
0评论
1点赞
发布博客于 2 年前

Java - Introduction to Thread Pools

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net1. IntroductionThis article is a look at thread pools in Java – starting with the different implementations in the standar...
原创
34497阅读
0评论
1点赞
发布博客于 2 年前

Selenium - Difference between WebDriver.close() and WebDriver.quit()

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netSelenium webdriver provides two methods for closing a browser window - close() and quit(). Some people incorrectly use them i...
原创
34764阅读
0评论
1点赞
发布博客于 2 年前

Java - Comparing Java enum members: == or equals()?

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netCan==be used onenum?Yes: enums have tight instance controls that allows you to use==to compare instances. Here's the ...
原创
34687阅读
0评论
1点赞
发布博客于 2 年前

C++ - Understanding lvalues and rvalues in C and C++

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netThe termslvalueandrvalueare not something one runs into often in C/C++ programming, but when one does, it's usually not i...
原创
34549阅读
0评论
1点赞
发布博客于 2 年前

Python - Python Decorators III: A Decorator-Based Build System

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netI've usedmakefor many years. I only usedantbecause it produced faster Java builds. But both build systems started out th...
原创
34895阅读
0评论
1点赞
发布博客于 2 年前

Python - Python Decorators II: Decorator Arguments

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netReview: Decorators without ArgumentsIn part I, I showed how to use decorators without arguments, primarily using classes as...
原创
34932阅读
0评论
1点赞
发布博客于 2 年前

Python - Decorators I: Introduction to Python Decorators

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netI predict that in time it will be seen as one of the more powerful features in the language. The problem is that all the intr...
原创
34960阅读
0评论
1点赞
发布博客于 2 年前

Python - A guide to Python's function decorators

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netPython is rich with powerful features and expressive syntax. One of my favorites is decorators. In the context of design patt...
原创
35190阅读
0评论
1点赞
发布博客于 2 年前

Java - Guide to Java Reflection

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net1. OverviewIn this article we will be exploring java reflection, which allows us to inspect or/and modify runtime attribute...
原创
35036阅读
0评论
1点赞
发布博客于 2 年前

Java - Generics are not real generics

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netJava 5 added generics into the language. This allowed programmers to specify class types as parameters to other classes and m...
原创
35051阅读
0评论
1点赞
发布博客于 2 年前

Java - The Basics of Java Generics

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net1. IntroductionJava Generics were introduced in JDK 5.0 with the aim of reducing bugs and adding an extra layer of abstract...
原创
34962阅读
0评论
1点赞
发布博客于 2 年前

JMeter - How to solve “java.net.BindException: Address already in use: connect” issue on Windows

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netThis problem is Windows based. There is a article at https://support.microsoft.com/kb/q196271, which says Windows XP only wil...
原创
37052阅读
0评论
1点赞
发布博客于 2 年前

Selenium - How to overcome StaleElementReferenceException in Selenium WebDriver

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netIn this post, we see causes of Stale Element Reference Exception and how to overcome StaleElementReferenceException in Seleni...
原创
37128阅读
0评论
1点赞
发布博客于 2 年前

Software Testing - UI自动化测试常用设计模式之原型(Java)

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net原型模式是一个很简单的模式,它适用于我们要复制一个对象的时候。在UI自动化中,有时候我们希望能有一个clone方法,能够帮我们创造出一个新的对象的同时,还拥有原始对象中一样的属性。这在Java中比较容易实现。在Java中Object有clone方法,...
原创
37128阅读
0评论
1点赞
发布博客于 2 年前

Software Testing - UI自动化测试常用设计模式之装饰器(Java)

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net装饰器,适配器和代理我觉得可以不用分得那么清,都是为了使现有的类的行为满足我们新的需求而做的一层封装。最经典的例子就是Java I/O中的高级流,低级流了。那么在UI自动化中会有什么情况会用到呢?最常用的就是重试的功能。UI自动化是出了名的不稳定的,...
原创
37149阅读
0评论
1点赞
发布博客于 2 年前

Software Testing - UI自动化测试常用设计模式之状态(Java)

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net状态模式之所以常用是因为在我们的很多业务逻辑中都会有不同状态的出现,比如项目的状态,任务的状态等等。而不同的状态下UI上会有不同的行为,比如不同的控件的展示,不同的业务逻辑等。而我们往往需要验证不同状态下的逻辑,这时,我们就需要一种合适的方法来组织和...
原创
37108阅读
0评论
1点赞
发布博客于 2 年前

Software Testing - UI自动化测试常用设计模式之建造者(Java)

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net建造者模式和工厂模式都是用来创建对象的。建造者模式适用于一个对象的内部有特别多的属性需要外部来传递的情况,这些属性需要调用方动态的传递。所以Builder(建造者)模式是一个包含了很多个零件的对象,它封装了如何操作这些零件创造出最终调用方想要的东西,...
原创
37296阅读
0评论
1点赞
发布博客于 2 年前

Software Testing - UI自动化测试常用设计模式之策略(Java)

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net策略模式也是非常常用的,甚至很多时候它是其他模式的基础。它的思想也特别简单,当初它诞生的原因是为了摆脱大量的if...else...,把每个条件分支做成一个策略类。讲一下在UI自动化中我们怎么做,举一个最简单的例子,比如在某种APP的测试中,大量的C...
原创
37259阅读
0评论
1点赞
发布博客于 2 年前

Software Testing - UI自动化测试常用设计模式之模板(Java)

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net模板模式在UI自动化中比较常用的原因是在产品中有很多的操作路径是复用的,所以我们可以使用模板模式,把固定的路径抽象出来,由子类去实现那些独立的逻辑。模板模式的思想是使用父类来规定执行操作的步骤,为了代码复用也会实现一些通用的步骤,然后留下一些abst...
原创
37496阅读
0评论
1点赞
发布博客于 2 年前