Mac上搭建ios自动化测试环境

  • http://ios-driver.github.io/ios-driver/ # 官网关于ios-driver详细使用说明

  • 工具

    • VMware 12 Pro + vm tools.iso + Unlocker + OS X10.11 + Apple ID
    • Xcode7.3 + JDK1.8 + Maven3.5.3 + Gauge0.9.7 +ios-driver 0.6.5 + IDEA2017.3.4
  • System requirements for OSX

    • ios-driver is built upon 2 different frameworks from Apple.
      • For native apps, it uses the UIAutomation framework from Apple (more here). You need xcode with an IOS SDK > 5.0.
        • To check if you have the correct setup:
          • $ xcodebuild -showsdks
    • The server is written in Java and requires Java 7.To check that you have the correct version :
      • $ java -version
    • Mac 中 JDK默认安装路径
      • JETdeMac:apache-maven-3.5.3 JET$ /usr/libexec/java_home -V
      • Matching Java Virtual Machines (1):
      • 1.8.0_162, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
      • /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
        • 设置环境变量 JAVA_HOME
  • 1、先得要有Mac系统( Mac笔记本,或者VMware安装OS X 虚拟机)

  • 2、创建ios simulator

  • OS X EI Capitan 10.11.1快速升级方法介绍

  • Mac上安装Xcode

    • 下载安装包形式安装
      • https://developer.apple.com/download/more/下载apple开发工具,包括xcode & Command Line Tools (macOS El Capitan version 10.11) for Xcode8.2等(需要输入apple id)
        • Mac10.11, 对应安装Xcode 8.2 (5.2G) 版本
        • Mac系统对应XCode版本,都可以在这个链接里查看得到
        • 建议使用safari浏览器下载,速度很快(我的达到了2M/s)
          • Mac下载的文件在哪?
            • 从 App Store 中下载的软件:
              • 如果你是从 App Store 应用商店中下载的软件,可以在 Launchpad 面板中看到。我们可以通过按键盘上的 F4 键,或在触控板上用四个手指合拢打开 Launchpad 面板。
              • 另外我们还可以在 Finder 中的“应用程序”中找到它们,这里会显示当前电脑上安装的所有应用软件
              • 还可以在终端命令窗口中输入 ls /Applications 来查看所有的应用软件。
            • 查看在 Safari 浏览器下载的:
              • 如果你是通过 Safari 浏览器下载的内容,可以点击 Safari 窗口右上角的“下载”图标.随后可以看到最近的下载列表,如果想要打开下载文件的位置,请点击文件右侧的“查找”图标.接着就会在 Finder 窗口中显示该文件的所在位置
            • 直接在 Dock 栏中的下载栏目中查看:
              • 在屏幕下方 Dock 栏的右侧有一个“下载”栏目,可以看到最近下载的文件
      • Xcode: This is the complete Xcode developer toolset for Apple Watch,Apple TV,iPhone,iPad,and Mac. It includes the Xcode IDE,ios Simulator,and all required toolsand frameworks for building iOS,watchOS,tvOS and macOS apps.
      • 安装xcode_7.3.dmg
        • 双击xcode_7.3.dmg,等完成后,按照提示,拖动到Applications,耐心等待(正在将"xcode.app"拷贝到"应用程序" (10.48G)) ---- 此过程,时间很漫长...
      • 查看xcode的版本
        • 终端中输入 xcodebuild -version
          • JETdeMac:~ JET$ xcodebuild -version
          • Xcode 7.3
          • Build version 7D175
            • Win7 64位上安装的OS X虚拟机, Win7 32 bit mstsc连接 Win7 64bit, OS X Terminal上复制,直接复制到win7 32上是无法复制的;
              • 先复制到win7 64上,再复制到win7 32bit 上,是可以的.
          • 有时候直接输入这个命令xcodebuild -version,报错:error: tool 'xcodebuild' requires Xcode // select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
        • 点击“Xcode”的menu菜单。点击里面的“About xcode”选项,此时会打开对话框。
    • 安装Xcode8.2
      • 下载下来以后,发现文件名是 Xcode_8.xip,以往的扩展名都是 .zip,今年的有一点不一样。但是归档工具还是能识别这个文件,双击以后,本来挺激动。但是,发现过了一会报了一个错误 “未能完成该操作。cpio read error:Undefined error:0”。
      • 拿这个错误去简书内搜了一下,没有有价值的解决方案,后来又去了谷歌,在 stack overflow 上找到了答案,你只要把Mac系统升级到最新的 10.11.6,再重启系统,双击打开就没有问题了。
    • 命令行方式安装指定版本的Xcode & simulator
    • 干净地卸载Xcode
      • 根目录下的必须要用管理员权限:
        • sudo rm -rf /Applications/Xcode.app
        • sudo rm -rf /Library/Preferences/com.apple.dt.Xcode.plist
      • 然后删除自己目录下的:
        • rm -rf ~/Library/Preferences/com.apple.dt.Xcode.plist
        • rm -rf ~/Library/Caches/com.apple.dt.Xcode
        • rm -rf ~/Library/Application\ Support/Xcode
      • 以及和开发者相关的:
        • rm -rf ~/Library/Developer/Xcode
        • rm -rf ~/Library/Developer/CoreSimulator
        • rm -rf ~/Library/Developer/XCPGDevices
    • 安装/卸载command line tools for xcode
      • 安装:
        • brew doctor
      • 卸载:
        • cd /Library/Developer
        • JETdeMac:Developer JET$ sudo rm -rf CommandLineTools/
  • mac安装神器brew

    • 命令行输入: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 回车(这里有提示目录不存在,要创建需要按return键,如果用的windows键盘,就是回车键)
      • 此过程,自动安装: Installing Command Line Tools (macOS El Capitan version 10.11) for Xcode
    • 它的用法
      • brew update 更新brew;
      • brew install {应用名,如git} 安装软件
      • brew cask install {应用名,如git} 也是下载安装,与上面的区别,请查看https://www.zhihu.com/question/22624898
      • 更多用法请 brew help
  • Install Gauge for Mac OS X

    • 1. use brew
      • brew update
      • brew install gauge
        • gauge -v 验证是否安装OK
          • JETdeMac:Downloads JET$ gauge -v
          • Gauge version: 0.9.7
          • Plugins

          • No plugins found
          • Plugins can be installed with gauge install {plugin-name}
        • gauge init java
        • JETdeMac:MyGaugeTest JET$ gauge run specs/
          • Installing required plugins.
          • .....................
          • ........................
          • Specification Heading

          • Vowel counts in single word ✔ ✔

          • Vowel counts in multiple word ✔ ✔

          • Successfully generated html-report to => /Users/JET/Downloads/MyGaugeTest/reports/html-report/index.html
          • Specifications: 1 executed 1 passed 0 failed 0 skipped
          • Scenarios: 2 executed 2 passed 0 failed 0 skipped
    • 2. use zip
      • $ unzip -o gauge-0.9.7-darwin.x86_64.zip -d /usr/local/bin
  • Install JDK for OS X

    • oracle官网下载mac版本的JDK: jdk-8u162-macosx-x64.dmg
    • 双击安装,出现pkg文件,直接双击安装即可
    • java -version 查看是否安装成功
      • 默认已经设置了环境变量
        • JETdeMac:~ JET$ java -version
        • java version "1.8.0_162"
        • Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
        • Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)
  • Install Maven for OS X (IDEA201703.04版本自带Maven3.3.9,在Mac中配置好很久自己安装的3.5.2/3,都无法加载pom.xml中的依赖。还是使用IDEA自带的Maven!!!)

    • htps://blog.csdn.net/u011886447/article/details/70200922
    • 从官网(http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.2/binaries/)下载 Maven (apache-maven-3.5.2-bin.tar.gz)并解压。
      • tar -zxvf apache-maven-3.5.2-bin.tar.gz -C /data/maven/
      • mkdir -p /data/maven/LocalHouse
    • 设置环境变量
      • JETdeMac:Home JET$ sudo vi ~/.bash_profile # 设置maven & java 环境变量
        • export MAVEN_HOME="/data/maven/apache-maven-3.5.2"
        • export PATH="MAVEN_HOME/bin:PATH"
        • export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home"
        • export PATH="JAVA_HOME/bin:PATH"
      • JETdeMac:Home JET$ source ~/.bash_profile # 使环境变量生效
      • JETdeMac:Home JET$ mvn -v # 检查环境变量是否生效
        • Apache Maven 3.5.2 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-25T03:49:05+08:00)
        • Maven home: /data/maven/apache-maven-3.5.2
        • Java version: 1.8.0_162, vendor: Oracle Corporation
        • Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/jre
        • Default locale: zh_CN, platform encoding: UTF-8
        • OS name: "mac os x", version: "10.11.1", arch: "x86_64", family: "mac"
  • Mac下安装/注册/配置IDEA

    • 安装IDEA
      • 先到IDEA官网下载Mac版本的IDEA(ideaIU-2017.3.4.dmg)
      • 直接双击ideaIU-2017.3.4.dmg,拖动到Applications,安装完成后,在Launch里找到IDEA,运行
    • 注册IDEA
      • 先Finder里快捷键组合 Shift+Command+G 三个组合按键,并输入 Hosts 文件的所在路径:/etc/hosts,将“0.0.0.0 account.jetbrains.com”添加到hosts文件中
        • 注意:会提示"无权限更改“,所以只能通过下面的命令行sudo更改
      • sudo nano /private/etc/hosts
        • 将“0.0.0.0 account.jetbrains.com”添加到hosts文件中
        • mac nano 保存退出
          • Ctrl + x,保存,会提示按Y,不保存就 N,取消就 C
            • Enter
      • 登录http://idea.lanyus.com/ ,复制Activation code,粘贴到IDEA中
        • Mac中,Command 相当于 Windows中的Ctrl
          • Mac中,复制:command+c, 粘贴: command+v
          • IDEA中,复制一行: command+d
    • 配置IDEA
      • 配置Maven(Mac中,使用IDEA自带的Maven才正常加载pom.xml依赖!!)
      • 配置Gauge插件
        • Configure-Preferences-Plugins:
          • 搜索“gauge",下载(0.3.11), install
            • 但是不知道是网络不好,还是啥原因,一直下载不成功
          • 后来直接到IDEA Plugin网站下载gauge(http://plugins.jetbrains.com/plugin/7535-gauge) Gauge-Java-Intellij-0.3.11.zip
            • IDEA:Configure-Preferences-Plugins:
              • Install plugins from disk, 选择Gauge-Java-Intellij-0.3.11.zip,点击restart IDEA
      • JDK配置
        • idea Structure Project:
          • 默认设置为了我自己安装的1.8版本的(可以再检查下)
  • 官网推荐ios-driver

    • For testing any iOS native, hybrid, or mobile web application using WebDriver - we recommend: ios-driver.
  • ios-driver官网推荐使用simulator

    • Using simulators is the default way to use ios-driver.It offers more flexibility, and it is faster than tests on a real device. However, if your specific needs require tests on real device, in the next release, ios-driver will also support devices without having to make any modifications! ( http://ios-driver.github.io/ios-driver/ )
    • Note: Release 0.6.5 does not support xCode 5. If you are using xCode 5, please use the latest snapshot 0.6.6-SNAPSHOT.
  • Mac系统如何启动iOS模拟器 快速启动iOS模拟器教程

    • 创建模拟器包:
      • 在终端上运行下面的命令来查找你的机器上可用的SDK的版本:
        • xcodebuild -showsdks
      • 继续在终端运行如下命令,用你的模拟器SDK替换“-sdk”后面的字段
        • xcodebuild -arch i386 -sdk iphonesimulator9.3
          • 注意:如果你的项目是多“Target”的项目,那么你还需要指定一个Target,从而生成那个Target的模拟器包,命令如下:
            • xcodebuild -arch i386 -sdk [iphonesimulator] -scheme [NameOfScheme]
              • 运行成功后,在终端将输出一系列信息,并以** BUILD SUCCEEDED **结尾。
              • 生成的模拟器包存储在这个路径:
                • {Derive data directory}/build/Release-iphonesimulator/{projectname}.app
                • 这一路径的具体信息在最后终端的输出信息中也可以找到。
      • 通过命令行启动iOS模拟器:
        • brew install ios-sim
        • ios-sim launch <path to .app>
    • 用ios5.0模拟器(iphonesimulator5.0)建立工程
      • $ xcodebuild -sdk iphonesimulator5.0
        • 默认是Release工程,要设置成Debug模式如下:
          • $ xcodebuild -sdk iphonesimulator5.0 -configuration Debug
        • clean创建的工程
          • $ xcodebuild clean -sdk iphonesimulator5.0 -configuration Debug
  • https://www.cnblogs.com/feifeidxl/p/4581369.html[Selenium] IOS 之 ios-driver

    • xcodebuild -showsdks

      image
    • xcodebuild -arch i386 -sdk iphonesimulator9.3

    • 在第一次运行 ios-driver 之前,应确保一下目录和文件的权限更新:

      image
      image
    • 先ios-driver网上下载ios-server-0.6.5-jar-with-dependencies.jar

      image
      image
    • 浏览器查看wd/hub/status,默认端口号为5555,可在浏览器中访问如下地址,如果看到类似JSON 对象的信息,则说明前述操作成功

      image
  • 例子:

    • 例子1:自动化操作iOS浏览器,打开百度网页等操作
      • IDEA中添加 ios-server-0.6.5-jar-with-dependencies.jar 文件,因为需要库的支持org.uiautomation.ios.IOSCapabilities
      • maven:
        • <dependency>
        • <groupId>org.uiautomation</groupId>
        • <artifactId>ios-server</artifactId>
        • <version>0.6.5</version>
        • </dependency>
      • 代码实例:
        • 示例代码:
        • package com.learningselenium.ios;
        • import junit.framework.TestCase;
        • import java.net.URL;
        • import org.openqa.selenium.remote.RemoteWebDriver;
        • import org.openqa.selenium.remote.DesiredCapabilities;
        • import org.uiautomation.ios.IOSCapabilities;
        • public class testiOSBaidu extends TestCase{
        • public void testBaidu() throws Exception{
        • //设置DesiredCapabilities,其中IOSCapabilities设置为iphone,如果程序运行在iPad模拟器上,可设置为ipad。
        • //参数Safari 表示待测试程序的bundle name,因为这里是测试 Web 页面,默认是用 Safari 打开
        • DesiredCapabilities safari = IOSCapabilities.iphone("Safari");
        • RemoteWebDriver driver = new RemoteWebDriver(new URL("http://localhost:5555/wd/hub"), safari );
        • driver.get("http://www.baidu.com");
        • driver.close();
        • }
        • }
    • 2.ios-driver 的 Native app 实例
      • 接下来以苹果官网的示例程序 InternationalMountains 为例,对原生 app 的测试过程进行讲解,示例代码下载地址:
      • https://developer.apple.com/legacy/library/samplecode/internationalMountains/introduction/intro.html
      • 请确保app 程序和 UIAutomation已关联,方法如下:
      • 在 Xcode 的菜单中选择 Product->Profile,并选择 Automation。该设定会构建 app 并启动 Instruments
      • 将 Instruments 关闭,并在 Xcode 中选择 Window->Organizer->Projects,可看到 InternationalMountains.app 文件所在位置为:
      • ~/Library/Developer/Xcode/DerivedData/InternationalMountainseordguimrxknwoaynobkvpirkacs/Build/Products/Debugiphonesimulator/InternationalMountains.app
      • 接着进入刚下载的 ios-server-0.6.5-jar-with-dependencies.jar 的路径,执行如下命令:
      • $ java -jar ios-server-0.6.5-jar-with-dependencies.jar -aut
      • ~/Library/Developer/Xcode/DerivedData/InternationalMountainseordguimrxknwoaynobkvpirkacs/Build/Products/Debugiphonesimulator/InternationalMountains.app -port 4444
      • 接下来确认 ios-driver 启动成功并可访问该 app,可通过浏览器访问如下地址,如果看到类似JSON 对象的信息,说明前述操作成功:
      • http://localhost:4444/wd/htb/status
      • 如果是在模拟器中运行app,则需要在启动 ios-driver 时使用 -simulators 参数,执行命令及打印信息:
      • $ java -jar ios-server-0.6.5-jar-with-dependencies.jar -aut
      • ~/Library/Developer/Xcode/DerivedData/InternationalMountainseordguimrxknwoaynobkvpirkacs/Build/Products/Debugiphonesimulator/InternationalMountains.app -port 4444 -simulators
      • ... test can access the server at http://0.0.0.0:4444/wd/hub ...
      • 应确保已经通过了 Xcode 启动了模拟器,否则需要通过浏览器查看 ios-driver 的启动状态是否正常
      • 针对 InternationalMountains 的测试用例代码如下:
      • package com.learningselenium.ios;
      • import java.net.URL;
      • import jave.util.List;
      • import java.io.File;
      • import junit.framework.TestCase;
      • import org.openqa.selenium.By;
      • import org.openqa.selenium.WebElement;
      • import org.openqa.selenium.TakesScreenshot;
      • import org.openqa.selenium.OutputType;
      • import org.openqa.selenium.remote.RemoteWebDriver;
      • import org.openqa.selenium.remote.DesiredCapabilities;
      • import org.openqa.selenium.remote.Augmenter;
      • import org.uiautomation.ios.IOSCapabilities;
      • public class testiOSInternationalMountains extends TestCase{
      • public void testInternationalMountains() throws Exception{
      • DesiredCapabilities nativeAppCap= IOSCapabilities.iphone("InternationalMountains", "1.1");
      • RemoteWebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), nativeAppCap);
      • List<WebElement> cells = driver.findElement(By.className("UIATableCell"));
      • assertEquals(9, cells.size());
      • WebElement first = cells.get(0);  //操作列表中第一个元素
      • first.click();
      • //截屏操作和操作页面元素
      • TaksScreenshot screen = (TaksScreenshot ) new Augmenter().augment(driver);
      • File ss = new File("screenshot.png");
      • screen.getScreenshotAs(OutputType.FILE).renameTo(ss);
      • System.out.println("screenshot take:" + ss.getAbsolutePath());
      • By selector = By.xpath("//UIAStaticText[contains(@name, ‘climbed’)]");
      • WebElement text = driver.findElement(selector);
      • System.out.println(text.getAttribute("name"));
      • driver.quit();
      • }
      • }
      • 如果需要在真实设备上运行app,则需要在启动 ios-driver 时使用 -beta 参数,执行命令:
      • $ java -jar ios-server-0.6.5-jar-with-dependencies.jar -beta -port 4444
    • 3. ios-driver 的源码编译
      • https://github.com/ios-driver/ios-driver 源码(git/clone ios-driver-dev.zip)
        • 在解压后的源码根目录执行如下命令:
        • sudo mvn clean package
        • sudo mvn clean install
        • 如果编译成成,会看到如下日志:
        • ...
        • [INFO]BUILD SUCCESS
        • ...
        • build without the tests : mvn package -DskipTests
    • 4. Web app 或混合式 app
      • 针对这种方式的 app,需要用到远程 Webkit 的调试协议,并且 iOS 的版本要求为6+,Safari 的版本要求为6+。如果无法满足以上条件,也可继续测试原生 app,但无法在 Safari 上运行 Web 页面,也不能使用 DOM 选择器来与 UIWebviews 交互。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容

  • 用到的组件 1、通过CocoaPods安装 2、第三方类库安装 3、第三方服务 友盟社会化分享组件 友盟用户反馈 ...
    SunnyLeong阅读 14,499评论 1 180
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,099评论 18 139
  • Qt是属于一个跨平台的GUI开发软件,支持的平台有Unix、Linux、Windows/WinCE、IOS等。 Q...
    一叶之界阅读 8,024评论 0 17
  • 这期的歌手突围赛,除了上期票选的3个直接入围决赛的首发歌手张韶涵、汪峰和Jessie J,其余的10位歌手进行10...
    七日樱阅读 255评论 0 0
  • 朝九晚五的下班、买菜、做饭……这是上班族的不变节奏。 民以食为天,吃是老百姓生活中第一桩大事。最近几年去菜场转转,...
    昕城阅读 281评论 2 3